2012-11-29 53 views
0

我有一个目录中的文件夹名称从1到700(中间有很多缺失的数字)。在每个文件夹中有jpg文件需要合并并转换为pdf文件。每个文件夹中的图像必须创建为单独的pdf文件。对于合并和转换的图像我用下面的脚本:从不同的子目录中分别合并jpg文件并将它们保存到一个文件夹中

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。

回答

1

要获得目录和循环在他们的列表中,您可以结合使用findfor循环:

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; 
相关问题