Как получить текущий счет строки из xargs?

Я хочу захватить каждые 5 изображений в каталоге и объединить их в новый файл с уникальным именем файла на 5 групп изображений.

find *.jpg | xargs -n 5 -i convert {} -append {#}.png 

Это действительно близко, но {#} не выводит текущий счет строки. Возможно ли это с помощью xargs?

3 Solutions collect form web for “Как получить текущий счет строки из xargs?”

Если имена файлов не содержат пробелов:

Пробный прогон:

 find *.jpg | xargs -n 5 | awk '{OFS=" ";}{print "convert",$1,$2,$3,$4,$5,"-append",NR".png\n";}' 

Если все выглядит нормально, добавьте | sh | sh .

С zsh :

 set -- ./**/*.jpg(N.) n=0 while (($# >= 5)) { convert $@[1,5] -append $((++n)).png shift 5 } 

Это должно работать с любыми символами в именах файлов, а список файлов сортируется. Скрытые файлы и каталоги игнорируются.

Рад, что вы можете сделать это parallel . Если вы все еще хотите использовать xargs, вы можете добавить echo в команду xargs, чтобы просто напечатать команду, а затем обработать вывод с помощью awk, чтобы заменить последнее слово подходящим подсчитанным именем файла (с ведущими 0 для удобства перечисления) :

 find . -name '*.jpg' | xargs -n 5 -i echo convert {} -append {#}.png | awk '{ $NF = sprintf("%04d.png", i); i++; print }' | bash 

(Вам повезло, мои xargs не позволяют мне смешивать -i и -n). Это не будет работать, если у вас есть пробелы в именах файлов. Я использовал find . -name find . -name если у вас слишком много файлов, а *.jpg слишком велико для расширения. (add -maxdepth 1 если вы не хотите входить в поддиры).

Так что, возможно, проще сделать все это в awk:

 find . -maxdepth 1 -name '*.jpg' | awk '{ files = files " " $1 } NR%5 == 0 { printf("convert %s -append %04d.png\n",files,i); i++; files="" } END { if(files!="")printf("convert %s -append %04d.png\n",files,i) } ' | bash 

Часть END обрабатывает случаи, когда в конце не существует нескольких файлов.

  • Linux: найдет | xargs grep имеют ограничения?
  • xargs git: пропустить ввод пользователя
  • Использование xargs для генерации ссылок
  • xargs не может обрабатывать пробелы в строках
  • Сделать xargs в качестве первого параметра
  • Использование xargs с вводом из файла
  • Используйте массив bash в качестве списка аргументов в списке (с помощью Midnight Commander)
  • Используйте команду find для выполнения ряда команд
  • Предоставлять строки, хранящиеся в файле, в виде списка аргументов для команды?
  • Расширение оболочки оболочки Ubuntu - путаница с командой sox
  • Исправлен последний аргумент с xargs
  • Interesting Posts

    Как перечислять все команды, содержащиеся в определенном пакете rpm?

    Как убить неактивных пользователей на Solaris?

    Как вы монтируете образ диска qemu с форматированием ext2?

    update-rc.d, игнорируя порядковые номера

    Переименуйте файлы, чтобы добавить начальные нули в числа

    Скопировать файлы и дерево каталогов для файлов в указанном диапазоне

    Как я могу получить количество файлов в каталоге с помощью командной строки?

    Как запустить человека с форматированием в неинтерактивной оболочке?

    Ошибка записи: на устройстве нет места. Удаление дополнительных пакетов. Попытка восстановления

    Установка trac – «Trac требует Python 2.5 или новее»

    Как длинные командные строки (> $ COLUMNS) автоматически завернуты в новую строку?

    Запуск для цикла через ssh

    Как я могу исправить размеры значков диалогового окна Chrome / Chromium в HiDPI?

    Fedora 25 Изменить с Python 2.7.13 на Python3 (сломанный `alternatives`)

    Как избежать обертывания в выходе bc

    Linux и Unix - лучшая ОС в мире.