我正在尝试在文件夹树中查找 JPG 文件以执行命令“”将其转换为 PDF。
问题是我正在运行的代码将文件留在同一目录中,我想移动它但保留文件树的结构。
到目前为止我已经尝试过:
find . -iname '*.jpg' -exec mogrify -format pdf '{}' \;
此命令运行完美。我想操纵“{}”移动其部分内容;
{} = ./1/aa.xxx
我想将其转换为:
{} = ./new/1/aa.pdf
感谢@mpez0,我可以做一些改变并得到解决方案:
find . -iname '*.jpg' | while read file ; do
oldfile=${file##*/};
olddir=${file/"$oldfile"/""};
pdfdir=${file/'./''./PDF'};
pdfdir=${pdfdir/"$oldfile"/""};
savedir=${file/'./''./OLD'};
savedir=${savedir/"$oldfile"/""};
newfile=${oldfile/.[Jj][Pp][Gg]/.pdf};
mogrify -format pdf "$file";
mkdir -p "$pdfdir";
mkdir -p "$savedir";
mv -- "$olddir$newfile" "$pdfdir$newfile";
mv -- "$olddir$oldfile" "$savedir$oldfile";
done
此代码的作用是:
find . -iname '*.jpg'
查找所有以 jpg 和 JPG 结尾的文件
while read file ; do
如果操作获取 ani 文件,则将 rout 保存在变量中file
oldfile=${file##*/};
取出文件 pat 并将文件的名称保存在变量中oldfile
olddir=${file/"$oldfile"/""};
取出要保存 pat 的文件的名称 将olddir
pdfdir=${file/'./''./PDF'};
./ 更改为 ./pdf 并将新 pat 保存在 中pdfdir
pdfdir=${pdfdir/"$oldfile"/""};
取出要保存 pdf pat 的文件的名称 将pdfdir
savedir=${file/'./''./OLD'};
./ 更改为 ./old 并将新 pat 保存在 中savedir
savedir=${savedir/"$oldfile"/""};
取出要保存 pdf pat 的文件的名称 保存将在 中savedir
newfile=${oldfile/.[Jj][Pp][Gg]/.pdf};
创建的新文件的名称 将newfile
mogrify -format pdf "$file";
其转换file
为 pdf
mkdir -p "$pdfdir";
创建 pat 的目录pdfdir
mkdir -p "$savedir";
创建 pat 的目录savedir
mv -- "$olddir$newfile" "$pdfdir$newfile";
移动新的 pdf 文件 创建到 pdf 目录 将
mv -- "$olddir$oldfile" "$savedir$oldfile";
旧的 jpg 文件移动到旧目录
done
结束过程
我希望这能帮助别人
答案1
find . -iname '*.jpg' | while read f ; do
new=`echo $f | sed -e 's/\.[Jj][Pp][Gg]$/.pdf/'`;
newd=`dirname $f`;
newd="new/$newd"
mogrify -format pdf $f;
mv $new $newd;
done
当然,我建议运行回显mogrify
和mv
命令的脚本。如果mogrify
提供输出选项,请使用该选项而不是 mv。您可能会发现执行 find 并进行所有转换mogrify
,然后收集新的 .pdf 更简单。
答案2
如果你使用convert
而不是mogrify
(同一系列的一部分),那么你的命令将变成:
find . -iname '*.jpg' -exec convert -format pdf '{}' new/'{}'.pdf \;
与 不同mogrify
,convert
使用 不会创建更新的文件扩展名,因此您将获得.jpg.pdf
(加上大写)作为新的文件扩展名,但这很容易通过 进行更改rename
:
find new -iname '*.jpg.pdf' -exec rename 's/\.[Jj][Pp][Gg]//' '{}' \;
如果你不需要保留这些 JPEG 图像,你可以随后将其删除(我希望你不需要那命令拼写)。