
Necesito poder ordenar alfabéticamente la salida find
antes de enviarla a un comando. Entrar | sort |
entre no funcionó, entonces, ¿qué podía hacer?
find folder1 folder2 -name "*.txt" -print0 | xargs -0 myCommand
Respuesta1
Utilízalo find
como de costumbre y delimita tus líneas con NUL. GNU sort
puede manejarlos con el modificador -z:
find . -print0 | sort -z | xargs -r0 yourcommand
Respuesta2
Algunas versiones de sort
tienen una -z
opción que permite registros terminados en nulo.
find folder1 folder2 -name "*.txt" -print0 | sort -z | xargs -r0 myCommand
Además, también puedes escribir un script de alto nivel para hacerlo:
find folder1 folder2 -name "*.txt" -print0 | python -c 'import sys; sys.stdout.write("\0".join(sorted(sys.stdin.read().split("\0"))))' | xargs -r0 myCommand
Agregue la -r
opción para xargs
asegurarse de que myCommand
se llame con un argumento.
Respuesta3
Creo que necesitas la -n
bandera para ordenar #
Según el hombre ordenar:
-n, --numeric-sort
compare according to string numerical value
editar
El print0 puede tener algo que ver con esto, acabo de probar esto. Saque el print0, puede terminar en nulo la cadena en orden usando la -z
bandera
Respuesta4
Alguna implementación de find
soportes ordenó el recorrido directamente a través del -s
parámetro:
$ find -s . -name '*.json'
Desde la búsqueda de 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.