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-execacció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
-printfNo se admite en BSD de OS Xfind.-printftiene poca relación con laprintfutilidad 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-printfen 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--nullo de-n1opciones está disponible en OSX¿Qué hay de esto?
Ventaja: solo se genera exactamente un proceso adicional, no uno por cada resultado.
fuente
Puede llamar
shdesde la-execopció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