Estoy intentando utilizar find -exec con varios comandos sin ningún éxito. ¿Alguien sabe si son posibles comandos como los siguientes?
find *.txt -exec echo "$(tail -1 '{}'),$(ls '{}')" \;
Básicamente, estoy tratando de imprimir la última línea de cada archivo txt en el directorio actual e imprimir al final de la línea, una coma seguida del nombre del archivo.
find
acepta múltiples porciones de exec
al comando. Por ejemplo:
find . -name "*.txt" -exec echo {} \; -exec grep banana {} \;
Tenga en cuenta que en este caso el segundo comando sólo se ejecutará si el primero vuelve con éxito, como menciona @Caleb. Si quieres que ambos comandos se ejecuten independientemente de su éxito o fracaso, podrías utilizar esta construcción:
find . -name "*.txt" \( -exec echo {} \; -o -exec true \; \) -exec grep banana {} \;
No sé si se puede hacer esto con find, pero una solución alternativa sería crear un script de shell y ejecutarlo con find.
lastline.sh:
echo $(tail -1 $1),$1
Hacer el script ejecutable
chmod +x lastline.sh
Usa find
:
find . -name "*.txt" -exec ./lastline.sh {} \;