Classificando a saída de “find -print0” canalizando para o comando “sort”

Classificando a saída de “find -print0” canalizando para o comando “sort”

Preciso ser capaz de classificar a saída em ordem alfabética findantes de canalizá-la para um comando. Entrar | sort |no meio não funcionou, então o que eu poderia fazer?

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

Responder1

Use findnormalmente e delimite suas linhas com NUL. GNU sortpode lidar com isso com a opção -z:

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

Responder2

Algumas versões sorttêm uma -zopção que permite registros terminados em nulo.

find folder1 folder2 -name "*.txt" -print0 | sort -z | xargs -r0 myCommand

Além disso, você também pode escrever um script de alto nível para fazer isso:

find folder1 folder2 -name "*.txt" -print0 | python -c 'import sys; sys.stdout.write("\0".join(sorted(sys.stdin.read().split("\0"))))' | xargs -r0 myCommand

Adicione a -ropção para xargsgarantir que myCommandseja chamado com um argumento.

Responder3

Eu acho que você precisa da -nbandeira para sort#

De acordo com o tipo de homem:

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

editar

O print0 pode ter algo a ver com isso, acabei de testar. Retire o print0, você pode encerrar a string em classificação usando o -zsinalizador

Responder4

Algumas implementações de findsuporte a travessia ordenada diretamente por meio do -sparâmetro:

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

Da descoberta do FreeBSDpágina de manual:

-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.

informação relacionada