Classificando a saída de “find”?

68

Eu preciso poder classificar em ordem alfabética a saída de find antes de direcioná-la para um comando. Inserir | sort | entre não funcionou, então o que eu poderia fazer?

find folder1 folder2 -name "*.txt" -print0 | xargs -0 myCommand
    
por Industrial 16.03.2012 / 11:29

4 respostas

40

Use find como de costume e delimite suas linhas com NUL. O GNU sort pode lidar com isso com a opção -z:

find . -print0 | sort -z | xargs -r0 yourcommand
    
por 16.03.2012 / 11:49
55

Algumas versões de sort têm uma opção -z , que permite registros com terminação nula.

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("
find folder1 folder2 -name "*.txt" -print0 | sort -z | xargs -r0 myCommand
".join(sorted(sys.stdin.read().split("
find folder1 folder2 -name "*.txt" -print0 | python -c 'import sys; sys.stdout.write("%pre%".join(sorted(sys.stdin.read().split("%pre%"))))' | xargs -r0 myCommand
"))))' | xargs -r0 myCommand

Adicione a opção -r a xargs para garantir que myCommand seja chamado com um argumento.

    
por 16.03.2012 / 13:16
3

O comando sort permite usar o nulo como caractere de tabulação via -t -z (bem como o \n proposto por Arcege . Portanto:

find folder1 folder2 -name "*.txt" -print0 | sort -t 
find folder1 folder2 -name "*.txt" | sort | xargs -d "\n" myCommand
| xargs -0 myCommand

Usar o separador -d "\n" as produz saídas intermediárias mais fáceis de ler, mas conforme declarado por Resposta de Ole Tangue , Isso tornará mais difícil lidar com xargs. No entanto, não é tão difícil, pois você pode usar %code% para especificar o delimitador:

find folder1 folder2 -name "*.txt" -print0 | sort -t 
find folder1 folder2 -name "*.txt" | sort | xargs -d "\n" myCommand
| xargs -0 myCommand
    
por 10.08.2015 / 20:41
3

Acho que você precisa da sinalização -n para o tipo #

De acordo com o tipo de homem:

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

editar

A print0 pode ter algo a ver com isso, acabei de testar isso. Pegue a print0 out, você pode null terminar a string no sort usando o -z flag

    
por 16.03.2012 / 11:33
0

Se você tem o link do GNU Paralelo instalado, você pode fazer isso:

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

Você pode instalar o GNU Parallel simplesmente por:

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

Assista aos vídeos de introdução do GNU Parallel para saber mais: link

    
por 09.05.2012 / 20:38