Estoy buscando obtener una lista de solo nombres de archivo (sin el resto de la ruta) al ejecutar el comando find desde una terminal. ¿Cómo logro esto en Mac?
Estoy buscando obtener una lista de solo nombres de archivo (sin el resto de la ruta) al ejecutar el comando find desde una terminal. ¿Cómo logro esto en Mac?
Respuestas:
Con nombre base:
find . -type f -exec basename {} \;
;
termina la -exec
acción. El \
es necesario porque ;
también tiene un significado especial para el shell.
Evilsoup mencionó que lo publicado no funciona para nombres de archivos espaciados. Entonces, en su lugar, podría usar:
find . -type f -print0 | while IFS= read -r -d '' filename; do echo ${filename##*/}; done
Con GNU find, puedes hacer:
find ~/tmp/ -printf "%f\n"
Probablemente valga la pena intentarlo también en OS X.
-printf
No se admite en BSD de OS X find
.
-printf
tiene poca relación con la printf
utilidad de shell C o POSIX printf
. El uso de este nombre de función histórica para algo diferente es muy poco considerado. Los chicos conservadores de BSD probablemente lo vean de la misma manera, por lo que probablemente no veremos un clon -printf
en el hallazgo de BSD, bajo ese nombre.
Hay una mejor manera de eliminar todo menos la última parte de una ruta de archivo; con awk Es mejor porque awk no se ejecuta una vez para cada archivo. En algunos casos esto importa.
find ~/tmp/ -type f | awk -F/ '{ print $NF }'
Solo buscamos archivos en ~ / tmp y obtenemos una lista donde cada entrada está separada por barras. Por lo tanto, utilizamos una barra como separador de campo (-F /) e imprimimos el parámetro de campo ($ 1 .. $ 9) que corresponde al último campo ($ NF).
EDITAR :
Utilizando sed
:
$ find . -type f | sed 's/.*\///'
Usando el comando xargs , como se menciona en la respuesta de @nerdwaller
$ find . -type f -print0 | xargs --null -n1 basename
find . -type f -print0| xargs --null -n1 basename
--null
o de -n1
opciones está disponible en OSX
¿Qué hay de esto?
find … | egrep -o -e '[^/]+$'
Ventaja: solo se genera exactamente un proceso adicional, no uno por cada resultado.