Передать два имени файла (с пробелами) через 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

person Jeroen van de Ven    schedule 22.11.2012    source источник


Ответы (3)


Измените команду sed на sed 's/.*/"&"/'.

Или используйте это чистое решение bash: замените команду sed в своем конвейере следующим кодом:

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

И удалите параметр -0 из xargs.

person anishsane    schedule 22.11.2012

Если у вас установлен GNU Parallel:

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

Он предназначен для правильной работы с пробелами, ', " и другими странными символами.

См. вводные видеоролики http://pi.dk/1.

person Ole Tange    schedule 23.11.2012

EDIT: Сначала я не понял, что вам нужно сортировать их в порядке самых последних файлов, и я предоставил ответ, используя 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

Примечание: эта команда будет работать, даже если в именах файлов есть «_» или пробелы.

person Lynch    schedule 23.11.2012