Использовать вывод из awk в качестве входа для mv

Я пытаюсь написать сценарий (или однострочный), который находит все файлы изображений с небольшими размерами и затем перемещает их в каталог. Основываясь на этом ответе от Ask Ubuntu , мне удалось создать список файлов с обоими размерами ниже 500, а затем я смог найти все распространенные файлы изображений, а также .jpg .

 find -E . -regex ".*\.(jpg|gif|png|jpeg)" -type f -exec identify -format '%w %h %i\n' '{}' \; | awk '$1<500 && $2<500' | awk '{print $3}' 

Второй awk – это то, что он печатает только имя файла, которое я надеялся использовать во входе в mv . Как я могу получить этот вывод в mv ?


Пример вывода первого awk :

 123 456 ./smallimage.jpg 333 333 ./square.png 

Второй awk просто выдает

 ./smallimage.jpg ./square.png 

Однако я не могу найти способ получить этот список имен файлов как вход для команды mv , так как желаемая итоговая команда – это некоторая форма mv <file list> ./small_images/

  • Как я могу переместить файлы по типу рекурсивно из каталога и его подкаталогов в другой каталог?
  • Как переместить файл рекурсивно на основе размера и структуры
  • Переименование папки с помощью txt-файла
  • Переименовать файлы в индекс
  • Усекать при необходимости при перемещении файла в файловую систему с более коротким NAME_MAX
  • Заменить символы подчеркивания пробелами для всех файлов в каталоге
  • Алфавит в именах файлов с помощью сортировки?
  • сортировка имен файлов численно, когда у них есть нечисловой префикс
  • 2 Solutions collect form web for “Использовать вывод из awk в качестве входа для mv”

    Включите mv в awk используя функцию system() :

     awk '$1<500 && $2<500 {system("mv "$3" /destination")} 

    Измените команду mv для удовлетворения ваших потребностей, здесь я использовал:

     mv /file_(third_field)_from_awk /destination 

    Также вам не нужно несколько awk s, достаточно одного, как показано выше.

    Предполагая, что у вас нет имен файлов со встроенными xargs , вы можете использовать программы GNU mv и xargs для этого.

      ... | awk ... | xargs -d'\n' mv -t ./small_images 

    xargs собирает имена файлов из ввода и добавляет их в команду mv -t ./small_images , разделяя очень длинные команды по мере необходимости. Вам нужна версия mv которая имеет опцию -t чтобы указать целевой каталог в начале команды, или написать небольшой скрипт для его обработки.

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