Сортировка вывода "find -print0" путем передачи в команду "sort"

Сортировка вывода "find -print0" путем передачи в команду "sort"

Мне нужно иметь возможность сортировать вывод по алфавиту findперед передачей его в команду. Ввод | sort |между не сработал, так что я могу сделать?

find folder1 folder2 -name "*.txt" -print0 | xargs -0 myCommand

решение1

Используйте findкак обычно и разделяйте строки символом NUL. GNU sortможет обрабатывать их с помощью ключа -z:

find . -print0 | sort -z | xargs -r0 yourcommand

решение2

В некоторых версиях 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она вызывается с аргументом.

решение3

Я думаю, вам нужен -nфлаг для сортировки#

По мнению человека сортировка:

-n, --numeric-sort
    compare according to string numerical value

редактировать

Print0 может иметь к этому отношение, я только что проверил это. Возьмите print0, вы можете завершить строку нулем в sort, используя -zфлаг

решение4

Некоторые реализации findподдерживают упорядоченный обход напрямую через -sпараметр:

$ find -s . -name '*.json'

Из FreeBSD находимстраница руководства:

-s       Cause find to traverse the file hierarchies in lexicographical
         order, i.e., alphabetical order within each directory.  Note:
         `find -s' and `find | sort' may give different results.

Связанный контент