jpeg文件的递归转换

jpeg文件的递归转换

我使用此命令行将文件夹内的 jpeg 转换为 pdf。

for f in *.jpg; do  echo "Converting $f"; convert "$f" "$(basename "$f" .jpg).pdf"; done

但是,我想将多个文件夹中的所有 .jpg 转换为位于同一文件夹内的 .pdf。我需要一个 bash 命令,其中显示“进入文件夹 A,启动到 pdf 的转换,完成后,转到文件夹 B 并执行相同的操作”。

jpeg 文件也可以以 .jpg 或 .JPG 结尾。

我的文件夹结构如下:

Folder A
    File1.jpg
    File1.jpg
    File1.jpg
    File1.jpg
    File1.jpg
Folder B
    File1.jpg
    File1.jpg        
    File1.jpg
    ...

关于如何实现这一目标有什么想法吗?

答案1

更新为允许文件名*.jpg*.JPG根据更新的问题:
用于-iname不区分大小写的比较,以及带有模式的变量扩展${file%.[jJ][pP][gG]}。这实际上会匹配.jpg任何大小写,例如.JpG

假设Folder AFolder B位于当前目录中,并且您想在所有目录中递归执行相同的操作:

find . -type f -iname \*.jpg | while read -r file
do
    echo "Converting $file"
    convert "$file" " ${file%.[jJ][pP][gG]}.pdf"
done

或者如果您想指定目录名称

find "Folder A" "Folder B" type f -iname \*.jpg | ...

如果您没有命名任何子目录,*.jpg则可以省略-type f.

如果您不想在Folder A等的子目录中递归地进行转换,您可能必须添加一个-maxdepth条件。

答案2

您所要求的不是递归操作,因此可以通过对原始代码进行简单的修改来处理它:

for f in */*.jpg */*.JPG; do echo "Converting $f"; convert "$f" "${f%.*}.pdf"; done

如果这是用于生产代码而不是一次性的,我会保护没有jpg文件JPG或 PDF 已经生成的可能性。当然,添加或调整到您满意的程度:

for f in */*.jpg */*.JPG
do
    if [[ -f "$f" ]] && [[ ! -f "${f%.*}.pdf" ]]
    then
        echo "Converting $f"
        convert "$f" "${f%.*}.pdf"
    fi
done

相关内容