Ordenar la salida de "find -print0" canalizando al comando "sort"

Ordenar la salida de "find -print0" canalizando al comando "sort"

Necesito poder ordenar alfabéticamente la salida findantes 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 findcomo de costumbre y delimita tus líneas con NUL. GNU sortpuede manejarlos con el modificador -z:

find . -print0 | sort -z | xargs -r0 yourcommand

Respuesta2

Algunas versiones de sorttienen una -zopció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 -ropción para xargsasegurarse de que myCommandse llame con un argumento.

Respuesta3

Creo que necesitas la -nbandera 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 -zbandera

Respuesta4

Alguna implementación de findsoportes ordenó el recorrido directamente a través del -spará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.

información relacionada