【问题标题】:loop through subdirectories and create PDF for jpg for each subdirectory循环遍历子目录并为每个子目录为 jpg 创建 PDF
【发布时间】:2021-02-14 15:48:07
【问题描述】:

我想从每个目录的多个 JPG 创建一个 PDF

/folder01/1.jpg
/folder01/2.jpg
/folder01/3.jpg
-->folder01.pdf

/folderxy/1.jpg
/folderxy/2.jpg
/folderxy/3.jpg
-->folderxy.pdf

我已经可以做的是为每个文件夹手动创建一个 PDF:

cd folder01
img2pdf $(find . -iname '*.jpg' | sort -V) -o ./folder01.pdf

cd..
cd folder02
img2pdf $(find . -iname '*.jpg' | sort -V) -o ./folder02.pdf

我怎样才能只用 ONE 命令做到这一点?

谢谢和问候

【问题讨论】:

    标签: linux bash shell ubuntu


    【解决方案1】:

    find 对于这个任务来说太过分了。使用通配符和参数扩展:

    for dir in */; do
        img2pdf "$dir"*.jpg -o "$dir${dir%?}.pdf"
    done
    

    【讨论】:

    • 是否也可以在一行命令中执行此操作?
    • @duffy6 是的。将上面的代码写在一行中,并在done 之前添加一个;。也就是说,for dir in */; do img2pdf "$dir"*.jpg -o "$dir${dir%?}.pdf"; done 在一行中。
    【解决方案2】:

    您可以使用 while read 循环来做到这一点:

    find . -type d | while read -r directory; do
        img2pdf $(find "$directory" -iname '*.jpg' | sort -V) -o "$directory/$directory.pdf"
    done
    

    如果对你来说这是一个单行命令真的很重要,你可以把这个循环放在一个函数中(然后你可以在一行中调用它),或者用分号替换一些换行符:

    find . -type d | while read -r directory; do img2pdf $(find "$directory" -iname '*.jpg' | sort -V) -o "$directory/$directory.pdf"; done
    

    【讨论】:

      猜你喜欢
      • 2016-03-24
      • 1970-01-01
      • 2020-11-26
      • 1970-01-01
      • 2019-01-22
      • 1970-01-01
      • 2013-12-03
      • 2017-08-01
      • 2016-03-11
      相关资源
      最近更新 更多