传递带有空格的文件名给imagemagic convert



假设我有以下文件:

'CamScanner 11-06-2022 13.04.24_1.jpg'   'CamScanner 11-06-2022 13.04.24_20.jpg'
'CamScanner 11-06-2022 13.04.24_10.jpg'  'CamScanner 11-06-2022 13.04.24_21.jpg'
'CamScanner 11-06-2022 13.04.24_11.jpg'  'CamScanner 11-06-2022 13.04.24_22.jpg'
'CamScanner 11-06-2022 13.04.24_12.jpg'  'CamScanner 11-06-2022 13.04.24_23.jpg'
'CamScanner 11-06-2022 13.04.24_13.jpg'  'CamScanner 11-06-2022 13.04.24_24.jpg'
'CamScanner 11-06-2022 13.04.24_14.jpg'  'CamScanner 11-06-2022 13.04.24_3.jpg'
'CamScanner 11-06-2022 13.04.24_15.jpg'  'CamScanner 11-06-2022 13.04.24_4.jpg'
'CamScanner 11-06-2022 13.04.24_16.jpg'  'CamScanner 11-06-2022 13.04.24_5.jpg'
'CamScanner 11-06-2022 13.04.24_17.jpg'  'CamScanner 11-06-2022 13.04.24_6.jpg'
'CamScanner 11-06-2022 13.04.24_18.jpg'  'CamScanner 11-06-2022 13.04.24_7.jpg'
'CamScanner 11-06-2022 13.04.24_19.jpg'  'CamScanner 11-06-2022 13.04.24_8.jpg'
'CamScanner 11-06-2022 13.04.24_2.jpg'   'CamScanner 11-06-2022 13.04.24_9.jpg'

我想把这些文件转换成pdf格式。这些文件目前没有按版本顺序列出,所以我试着这样做:

convert $(ls -v) output.pdf

但是由于文件名中的空格,这将失败。我想将文件名传递给按版本顺序列出的convert,以及处理名称内的空格。我见过一些SO问题,他们在传递文件进行转换之前按某种顺序对文件进行排序,但这些问题中没有一个在文件名中包含任何空格。如有任何建议,不胜感激:)

编辑:我也试过了:

ls -v | xargs -I% convert % output.pdf

但是这只能将一个jpg文件转换为pdf文件。

您需要引用每个文件名。或者,试试这个

readlines filearray <(ls -v)
convert "${filearray[@]}" output.pdf

一个更好的解决方案是在文件名中使用机器可读的日期和填充零的序列号,这将使它们对人类读者来说是明确的,并且很容易地解决排序顺序问题。

for file in CamScanner ??-??-???? ??.??.??_*.jpg; do
    tail=${file##*_}
    printf -v idx %04i ${tail%.jpg}
    mv "$file" "CamScanner-${file:17:4}-${file:14:2}-${file:11:2}_${file:22:8}_$idx.jpg"
done

演示:https://ideone.com/Svl6uQ

最新更新