Выполнение команды для каждого файла в папке в случайном порядке

Я хочу выполнить одну команду для каждого файла в папке, но беспорядочно. Что-то вроде:

find . -type f -exec <command> '{}' \; 

но каждый раз в другом порядке. Это наиболее близко к моим потребностям, но 1) оно не работает, 2) порядок случайный, но всегда тот же:

 find . -type f -print0 | sort -Rz | xargs -0 <command> 

One Solution collect form web for “Выполнение команды для каждого файла в папке в случайном порядке”

 find . -type f -exec <command> '{}' \; 

не эквивалентно

 find . -type f | xargs <command> 

соблюдать:

 $ find -type f ./b ./c ./e ./d ./a $ find -type f -exec echo '{}' \; ./b ./c ./e ./d ./a $ find -type f | xargs echo ./b ./c ./e ./d ./a 

xargs собирает кучу аргументов до заданной длины и затем выполняет команду со всеми аргументами одновременно.

Это то, что выполняется из find -type f -exec echo '{}' \;

 echo ./b echo ./c echo ./e echo ./d echo ./a 

Это то, что выполняется из find -type f | xargs echo find -type f | xargs echo

 echo ./b ./c ./e ./d ./a 

Это хорошо работает для команд, которые могут принимать несколько аргументов, таких как md5sum или file . Но не работает для команд, которые принимают только один аргумент за раз.

Чтобы заставить xargs больше походить на find -exec вы можете добавить аргумент -n1 в xargs :

 $ find -type f | xargs -n1 echo ./b ./c ./e ./d ./a 

-n1 сообщает xargs выполнить команду для каждых 1 аргумента.

В вашем примере выполните команду:

 find . -type f -print0 | sort -Rz | xargs -0 -n1 <command> 

Бонус: вы также можете заставить find -exec вести себя как xargs , закрыв -exec с помощью \+ вместо \; :

 find -type f -exec <command> '{}' \+ 
  • Как файлы tar с отсортированным порядком?
  • Есть ли способ сортировать grep-вывод csv-файла?
  • sort и ls - почему не заглавные буквы отсортированы в первую очередь?
  • Как перечислять файлы с именем XXXmmyy.dat в естественном хронологическом порядке?
  • Как подключить сортировку к gawk?
  • Присоединить два несортированных файла к POSIX?
  • Почему эта команда не сортируется на основе индекса uniq?
  • Сортировка вывода ls, где файлы заканчиваются цифрами
  • Как мне сначала сделать символы подчеркивания ls?
  • Как установить ls -lh со временем и длинным форматом даты в порядке убывания в .bashrc
  • Сравните и распечатайте данные из разных текстовых файлов на один в Shell
  • Interesting Posts

    Почему уменьшается доступное пространство в моем доме?

    Наследуются ли наследуемые переменные среды как переменные среды или переменные оболочки?

    Переместите некоторые файлы на каждый каталог в другой каталог

    Условный трубопровод

    Почему никто не использует позиционные аргументы, доступные для функций завершения Bash?

    Использовать sed с обратными ссылками

    Ограничить выполнение программы до списка аргументов

    Не удается получить доступ к ssh в моем VM Centos

    Мониторинг при запуске полноэкранного приложения?

    Какова скорость сетевого соединения между двумя контейнерами, которые взаимодействуют через виртуальный мост, работающий на одном и том же хосте?

    Семантический запрос локальных данных

    Cron несколько скриптов каждые 5 минут с 10 секундами между каждым скриптом

    dumpe2fs – записи о жизни – что это такое

    Как определить, было ли в метаданных

    Как получить конечные данные gzip-архива?

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