Использовать вывод из 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/

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 чтобы указать целевой каталог в начале команды, или написать небольшой скрипт для его обработки.

  • находить файлы по имени и перемещать их с одновременным переименованием
  • Переименовать маску файла BASH с помощью счетчика
  • расширение командной строки переименования команд
  • Переименовать команду с несуществующим целевым каталогом
  • find exec mv находит inode (dir), изменяет имя dir, но возвращает «Нет такого файла или каталога»,
  • Разрешить переименование, но не перемещение в другой каталог
  • Как удалить место во всех подкаталогах в сценарии оболочки?
  • Не удалось сохранить право собственности на копию, но в состоянии двигаться?
  • perl rename: предварительное присвоение набора имен файлов в подкаталогах
  • Переименование пакетного файла: лучше, чем случайный идентификатор, чтобы предотвратить удаление файлов с повторяющимися именами файлов?
  • Нужно обрезать имена имен файлов
  • Interesting Posts

    Оптимальная конфигурация SSD

    Потребность в структуре thread_info в Linux 2.6 Ядро

    Как использовать как встроенные динамики, так и внешний микрофон на одном разъеме?

    Как получить дизайн коричного окна

    Почему подстановка процесса приводит к файлу с именем / dev / fd / 63, который является трубой?

    Как контролировать производительность сети для каждого приложения в FreeBSD / PC-BSD?

    Как удалить RHEL из системы с двойной загрузкой?

    apt-get не удалось найти обновления для сжатия Debian

    захватить идентификатор процесса, который вызвал функцию внутри функции

    BCP не дает результатов и ничего не выводит при использовании допустимых операторов, но при этом они выдают ошибки при передаче недопустимых параметров

    Надежно проверьте приложение электронной почты

    Есть ли какая-либо программа для получения пароля GPG из GUI

    Как установить название терминала в linux mint 18

    Беспроводная сеть обеспечивает деаутентификацию ошибок: (Причина: 3 = DEAUTH_LEAVING)

    теневые файлы создаются автоматически в / etc на сервере solaris (SunOS 5.10)

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