命令“find”-exec 替换字符串

命令“find”-exec 替换字符串

我正在尝试在文件夹树中查找 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

当然,我建议运行回显mogrifymv命令的脚本。如果mogrify提供输出选项,请使用该选项而不是 mv。您可能会发现执行 find 并进行所有转换mogrify,然后收集新的 .pdf 更简单。

答案2

如果你使用convert而不是mogrify(同一系列的一部分),那么你的命令将变成:

find . -iname '*.jpg' -exec convert -format pdf '{}' new/'{}'.pdf \;

与 不同mogrifyconvert使用 不会创建更新的文件扩展名,因此您将获得.jpg.pdf(加上大写)作为新的文件扩展名,但这很容易通过 进行更改rename

find new -iname '*.jpg.pdf' -exec rename 's/\.[Jj][Pp][Gg]//' '{}' \;

如果你不需要保留这些 JPEG 图像,你可以随后将其删除(我希望你不需要命令拼写)。

相关内容