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

  • Пакетное переименование нескольких файлов с добавленной датой и меткой времени
  • Переместить скрипт оболочки файла
  • Переименование файлов без расширения файлов
  • Как переименовать все файлы со специальными символами и пробелами в каталоге?
  • Как добавить текущую дату перед расширением файла для нескольких файлов в каталоге?
  • Как переименовать несколько файлов в одной команде или скрипте в Unix?
  • Переименуйте текущий файл в vim
  • perl rename: предварительное присвоение набора имен файлов в подкаталогах
  • 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 чтобы указать целевой каталог в начале команды, или написать небольшой скрипт для его обработки.

    Interesting Posts

    Как параметры монтирования fstab работают вместе с определенными правами на файл в Linux

    «Доступ запрещен» для всех пользователей после сброса пароля root

    Управление неофициальными репозиториями в системе Debian

    Как использовать sed или awk для извлечения определенных строк в файле

    nmap необработанные пакетные привилегии не работают («операция не разрешена», даже как root)

    Как я могу сортировать список с уровнем major.minor.patch и иногда rc правильно?

    Окончания строк при использовании экрана GNU

    Анализ текстового файла с помощью awk

    Как продолжить анимацию в сценарии Плимута?

    Редактор Nano – отображение не обновляется с помощью PuTTY

    Почему мой rsync замедляется со временем?

    Как скопировать файл с нескольких серверов в локальную систему?

    Что случилось с файлом, когда я ввел «mv file.txt ../»?

    Как удалить последний столбец файла в Linux

    Звуковая обратная связь в терминальном / текстовом редакторе?

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