
Preciso ser capaz de classificar a saída em ordem alfabética find
antes 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 find
normalmente e delimite suas linhas com NUL. GNU sort
pode lidar com isso com a opção -z:
find . -print0 | sort -z | xargs -r0 yourcommand
Responder2
Algumas versões 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
garantir que myCommand
seja chamado com um argumento.
Responder3
Eu acho que você precisa da -n
bandeira 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 -z
sinalizador
Responder4
Algumas implementações de find
suporte a travessia ordenada diretamente por meio do -s
parâ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.