Eu preciso ser capaz de classificar alfabeticamente a saída find
antes de canalizá-la para um comando. Entrar | sort |
entre não funcionou, então o que eu poderia fazer?
find folder1 folder2 -name "*.txt" -print0 | xargs -0 myCommand
Eu preciso ser capaz de classificar alfabeticamente a saída find
antes de canalizá-la para um comando. Entrar | sort |
entre não funcionou, então o que eu poderia fazer?
find folder1 folder2 -name "*.txt" -print0 | xargs -0 myCommand
Respostas:
Algumas versões do sort
têm uma -z
opçã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 -r
opção para xargs
certificar-se de que myCommand
é chamado com um argumento.
-t \0
opção de tipo (que é um -z
sinônimo)
|sort
soluções é que você não pode mais usar -exec
. OK, embora seja possível reescrever sua declaração dada para -exec
que ela funcione xargs
, a pergunta é: e quanto aos "mini-scripts" ? ( sh -c ...
) Eu não chamaria isso trivial para transformar um mini-script 'sh -c' com vários comandos para que ele possa trabalhar com xargs
(se possível em tudo, que é)
printf %s\\n a b c d e | xargs -n3 sh -c 'printf %s, "$@"; printf \\n' x
Eu acho que você precisa da -n
bandeira para classificar #
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 isso. Retire o print0, você pode cancelar a sequência em ordem usando o -z
sinalizador
print0
parece ser espaço-separando os nomes de arquivos que é o que eu preciso passar para o meu comando, infelizmente
Se você possui o GNU Parallel http://www.gnu.org/software/parallel/ instalado, você pode fazer isso:
find folder1 folder2 -name "*.txt" -print |
sort |
parallel myCommand
Você pode instalar o GNU Parallel simplesmente:
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: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1
.
diferente ... Comsort
isso termina no final da lista ... compython
classificação até o topo. (talvez os tipos de python comLC_COLLATE=C
)