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

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

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> '{}' \+ 
  • Найти последний файл в каталоге, где конец файла соответствует строке
  • Как сопоставить 2 больших файла и распечатать разницу в сценарии оболочки
  • Выбор и сортировка IP-адреса, поддерживающего всю строку
  • Нестандартная сортировка вывода ls
  • Удаление дубликатов в большом текстовом списке
  • Сравните и распечатайте данные из разных текстовых файлов на один в Shell
  • Сортировка .csv файла по алфавиту не работает правильно, когда есть дефис
  • Как включить команду Diff в скрипт bash с подсказкой
  • Сортировка вывода ls, где файлы заканчиваются цифрами
  • Отображение имен файлов с помощью grep
  • Как изменить сортировку результата из grep -rc
  • Interesting Posts
    Linux и Unix - лучшая ОС в мире.