Creo que estas son las formas comunes de pasar el resultado de un comando al siguiente, como entradas.
¿Cómo funcionan estos tres? ¿O cuáles son algunos sitios web / URL?
Primeras cosas para escribir:
man find
man xargs
El find
comando imprime los resultados a la salida estándar de forma predeterminada, por lo que la -print
opción normalmente no es necesaria, pero -print0
separa los nombres de archivo con un byte 0 (NULL) para que los nombres que contienen espacios o líneas nuevas se puedan interpretar correctamente.
La -exec
opción es algo que puede usar en lugar de xargs: el comando find ejecuta un comando para cada elemento que encuentra.
El xargs
comando lee cadenas separadas por espacios o líneas nuevas (generalmente del comando find , pero podrían provenir de cualquier lugar) y ejecuta algún comando para cada cadena.
Si xargs se ejecuta con una opción -0 , esperará cadenas separadas por NULL como resultado defind ... -print0
La ventaja de xargs es que puede agrupar las cadenas juntas, de modo que solo ejecuta un comando una o dos veces en lugar de n veces.
Entonces, en el uso normal:
find start_directory -name '*.txt' | xargs ls -l
find enumeraría los nombres de archivo y xargs emitiría comandos como:
ls -l file1.txt file2.txt file3.txt ... fileN.txt
que es más rápido que tener tu comando find emitiendo:
ls -l file1.txt
ls -l file2.txt
ls -l file3.txt
ls -l ...
ls -l fileN.txt
Tenga en cuenta que xargs ya no es necesario con las implementaciones de búsqueda actuales que probablemente admitan esta sintaxis POSIX:
find directory -name '*.txt' -exec ls -l {} +
que es más simple y un poco más rápido que la variante xargs.
find directory -name '*.txt' | xargs ls -l
Ver los siguientes artículos:
Linux y Unix encuentran el tutorial de comandos con ejemplos
xargs: Cómo controlar y usar argumentos de línea de comandos
fuente