Мне нужно иметь возможность сортировать вывод по алфавиту find
перед передачей его в команду. Ввод | sort |
между не работал, так что я мог сделать?
find folder1 folder2 -name "*.txt" -print0 | xargs -0 myCommand
Мне нужно иметь возможность сортировать вывод по алфавиту find
перед передачей его в команду. Ввод | sort |
между не работал, так что я мог сделать?
find folder1 folder2 -name "*.txt" -print0 | xargs -0 myCommand
Ответы:
В некоторых версиях sort
есть -z
опция, которая допускает записи с нулевым символом в конце.
find folder1 folder2 -name "*.txt" -print0 | sort -z | xargs -r0 myCommand
Кроме того, вы также можете написать высокоуровневый скрипт для этого:
find folder1 folder2 -name "*.txt" -print0 | python -c 'import sys; sys.stdout.write("\0".join(sorted(sys.stdin.read().split("\0"))))' | xargs -r0 myCommand
Добавьте -r
параметр, чтобы xargs
убедиться, что он myCommand
вызывается с аргументом.
-t \0
опция для сортировки (которая является -z
синонимом)
|sort
решениями заключается в том, что вы больше не можете использовать -exec
. Хорошо, хотя можно переписать ваше заявление, данное -exec
так, чтобы оно работало xargs
, вопрос в том, что насчет «мини-скриптов» ? ( sh -c ...
) Я бы не назвал это тривиальным для преобразования мини-скрипта 'sh -c' с несколькими командами, чтобы он мог работать xargs
(если возможно, то есть)
printf %s\\n a b c d e | xargs -n3 sh -c 'printf %s, "$@"; printf \\n' x
Я думаю, вам нужен -n
флаг для сортировки #
По мужскому типу:
-n, --numeric-sort
compare according to string numerical value
редактировать
Возможно, print0 как-то связан с этим, я только что проверил это. Возьмите print0, вы можете завершить строку в нуле, используя -z
флаг
print0
похоже, это разделение пробелов между именами файлов, что, к сожалению, мне нужно передать моей команде
Если у вас установлен GNU Parallel http://www.gnu.org/software/parallel/, вы можете сделать это:
find folder1 folder2 -name "*.txt" -print |
sort |
parallel myCommand
Вы можете установить GNU Parallel просто:
wget http://git.savannah.gnu.org/cgit/parallel.git/plain/src/parallel
chmod 755 parallel
cp parallel sem
Посмотрите вступительные видео для GNU Parallel, чтобы узнать больше: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1
.
разному ... Когдаsort
он заканчивается в конце списка ... сpython
сортировкой наверх. (возможно сLC_COLLATE=C