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?
13
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:
fuente
Con GNU find, puedes hacer:
Probablemente valga la pena intentarlo también en OS X.
fuente
-printf
No se admite en BSD de OS Xfind
.-printf
tiene poca relación con laprintf
utilidad de shell C o POSIXprintf
. 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.
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).
fuente
EDITAR :
Utilizando
sed
:Usando el comando xargs , como se menciona en la respuesta de @nerdwaller
fuente
find . -type f -print0| xargs --null -n1 basename
--null
o de-n1
opciones está disponible en OSX¿Qué hay de esto?
Ventaja: solo se genera exactamente un proceso adicional, no uno por cada resultado.
fuente
Puede llamar
sh
desde la-exec
opción de búsqueda y evitar el uso de tuberías innecesarias. Esto también tiene la ventaja de que no necesita preocuparse por nombres de archivos divertidos (espacios, líneas nuevas, etc.):fuente