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
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
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.
O comando sort
permite usar o nulo como caractere de tabulação via -t
(bem como o -z
\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
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
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