0

ディレクトリに 1 から 700 までの名前のフォルダーがあります (その間に欠落している番号がたくさんあります)。各フォルダには、jpgマージしてファイルに変換する必要があるファイルがありpdfます。各フォルダ内の画像は、個別のpdfファイルとして作成する必要があります。画像をマージして変換するために、次のスクリプトを使用しました。

cd subfolder1
for i in *.jpg; do num=`expr match "$i" '\([0-9]\+\).*'`;
padded=`printf "%03d" $num`; mv -v "$i" "${i/$num/$padded}"; done
FILES=$( find . -type f -name "*jpg" | cut -d/ -f 2)
mkdir temp && cd temp 
for file in $FILES; do 
    BASE=$(echo $file | sed 's/.jpg//g');
    convert ../$BASE.jpg $BASE.pdf; 
    done && 
pdftk *pdf cat output ../../pdffolder/subfolder1.pdf && 
cd .. 
rm -rf temp

pdffolderすべてのpdfファイルが必要なディレクトリです。for directory in aこの目的で使用できるようなものはありますか? ファイルは、サブフォルダーのpdf名前と同じ名前にする必要があります。動作プラットフォームは Linux です。

4

1 に答える 1

1

ディレクトリのリストを取得してそれらをループするには、ループfindと組み合わせて使用​​できます。for

for subdir in $(find path/to/parent/dir -maxdepth 1 -type d); do
        # Do stuff with $subdir i.e:
        echo $subdir
done

ここでは、がfind付いたディレクトリに限定されており、最初のサブディレクトリのみが提供され、サブディレクトリの子ディレクトリは提供されません。-type d-maxdepth 1

このループ内に初期コードを配置するには:

START_DIR=$(pwd)
# Loop over all directories
for subdir in $(find path/to/parent/dir -mathdepth 1 -type d); do
      # Get the base name, for the pdf naming
      subdir_base=$(basedir $subdir);

      cd subdir;

      for i in *.jpg; do 
          num=`expr match "$i" '\([0-9]\+\).*'`;
          padded=`printf "%03d" $num`; mv -v "$i" "${i/$num/$padded}";
      done

      FILES=$( find . -type f -name "*jpg" | cut -d/ -f 2)
      mkdir temp && cd temp 

      for file in $FILES; do 
           BASE=$(echo $file | sed 's/.jpg//g');
           convert ../$BASE.jpg $BASE.pdf; 
      done && 
      pdftk *pdf cat output ../../pdffolder/$subdir_base.pdf && 
      cd ..
      rm -rf temp
      cd $START_DIR;
 done;
于 2012-11-29T08:33:08.673 に答える