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 回答