Сортировка вывода “находки”?

То, что мы делаем, является монтированием дом сервера на/mnt/server/export/home, затем на другой символьной ссылке машин корневой каталог каждого пользователя в локальный / домой. Это может сохраняться полуавтоматически через машины с rsync.

86
16.03.2012, 17:26
5 ответов

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

find . -print0 | sort -z | xargs -r0 yourcommand
57
27.01.2020, 19:30

Некоторые версии sort имейте a -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 назван с аргументом.

60
27.01.2020, 19:30
  • 1
    , Хороший один (два?)... Интересно, тем не менее, эти два дескриптора методов . по-другому... С sort это заканчивается в конце списка... с python это сортирует к вершине. (возможно, виды Python с LC_COLLATE=C) –  Peter.O 16.03.2012, 16:45
  • 2
    Существует также -t \0 опция для вида (который является a -z синоним) –  Javier 10.08.2015, 21:44
  • 3
    Проблема со всеми они |sort решения состоят в том, что Вы не можете использовать -exec больше. Хорошо, хотя возможно переписать Ваш оператор, данный -exec так, чтобы это работало с xargs, вопрос, что относительно "мини-сценариев"? (sh -c ...) Я не назвал бы это тривиальным для преобразования 'sh-c' мини-сценарий с несколькими командами так, чтобы он мог работать с xargs (если это возможно, вообще, который является) –  syntaxerror 20.11.2015, 21:57
  • 4
    @syntaxerror: Какую проблему у Вас есть использование sh-c с xargs? printf %s\\n a b c d e | xargs -n3 sh -c 'printf %s, "$@"; printf \\n' x –  Roger Pate 24.08.2016, 21:11

Я думаю, что Вам нужно -n флаг для sort#

Согласно виду человека:

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

править

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

5
27.01.2020, 19:30
  • 1
    Ну, это print0 кажется, разделение пространства имена файлов, который является тем, что я должен передать своей команде, к сожалению –  Industrial 16.03.2012, 12:46

Если у Вас есть Параллель GNU, http://www.gnu.org/software/parallel/ установил Вас, может сделать это:

find folder1 folder2 -name "*.txt" -print | 
  sort |
  parallel myCommand

Можно установить Параллель GNU просто:

wget http://git.savannah.gnu.org/cgit/parallel.git/plain/src/parallel
chmod 755 parallel
cp parallel sem

Посмотрите вводные видео для Параллели GNU для узнавания больше: https://www.youtube.com/playlist? list=PL284C9FF2488BC6D1

2
27.01.2020, 19:30
  • 1
    Каково выравнивание для использования Параллели GNU? Ускорять его? –  Peter Mortensen 28.09.2014, 03:18
  • 2
    Это и Вы не должны смешивать с \0 разделенными записями. спасибо –  Ole Tange 28.09.2014, 19:46

Некоторые реализации 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.
3
23.03.2021, 19:03

Теги

Похожие вопросы