在一个命令中通过xargs管道两个文件名(带空格)

时间:2012-11-22 13:56:26

标签: bash imagemagick command-line-interface ls xargs

我经常发现自己想把我拍摄的两张最新截图合并到一张图片中。我想使用ImageMagick在一个命令行中通过xargs(?)来合并按日期排序的两个最新文件。

到目前为止,我有以下内容,但它在处理文件名中的空格时遇到了问题。我似乎无法弄清楚如何完成这项工作。

ls -t | head -n 2 | sed 's/\n/\x0/' | xargs -0 -n 2 -I images convert images -append -quality 75 combined.jpg

3 个答案:

答案 0 :(得分:1)

将sed命令更改为sed 's/.*/"&"/'

或者使用这个纯粹的bash解决方案: 使用以下代码替换管道中的sed命令:

while read x; do echo "'$x'"; done

从xargs中删除-0选项。

答案 1 :(得分:1)

如果你安装了GNU Parallel:

ls -t | head -n 2 | parallel -n 2 convert {} -append -quality 75 combined.jpg

它旨在妥善处理空间,',"和其他奇怪的人物。

参见介绍视频http://pi.dk/1

答案 2 :(得分:0)

修改 起初我没有看到你需要按照最新文件的顺序对它们进行排序,我使用find提供了答案。

不幸的是,find不允许对文件进行排序。需要一些解决方法来正确排序。

以下是使用find:

按时间对文件进行排序的建议
find -type f -printf '%T+_%p\n' | sort -r | head -n 2 |  sed 's/[^_]*_//' | tr '\n' '\0' | xargs -0 -n 2 -I images convert images -append -quality 75

注意:即使文件名中包含“_”或空格,此命令也会起作用。