por - comando find linux recursivo
¿Cómo obtener solo el nombre de archivo con linux `find`? (7)
En GNU find puedes usar el parámetro -printf para eso, por ejemplo:
find /dir1 -type f -printf "%f/n"
Estoy usando Buscar todos los archivos en el directorio, así que obtengo una lista de rutas. Sin embargo, sólo necesito nombres de archivos. es decir, obtengo ./dir1/dir2/file.txt y quiero obtener file.txt
En el uso de mac (BSD find ):
find /dir1 -type f -exec basename {} /;
He encontrado una solución (en la página de makandracards), que da solo el nombre de archivo más reciente:
ls -1tr * | tail -1
(gracias a Arne Hartherz)
Lo utilicé para cp :
cp $(ls -1tr * | tail -1) /tmp/
Si desea ejecutar alguna acción solo contra el nombre de archivo, usar basename puede ser difícil.
Por ejemplo esto:
find ~/clang+llvm-3.3/bin/ -type f -exec echo basename {} /;
solo hará eco de nombre base /my/found/path . No es lo que queremos si queremos ejecutar en el nombre de archivo.
Pero luego puedes xargs la salida. por ejemplo, para matar los archivos en un directorio basado en nombres en otro directorio:
cd dirIwantToRMin;
find ~/clang+llvm-3.3/bin/ -type f -exec basename {} /; | xargs rm
Si está utilizando GNU find
find . -type f -printf "%f/n"
O puedes usar un lenguaje de programación como Ruby (1.9+)
$ ruby -e ''Dir["**/*"].each{|x| puts File.basename(x)}''
Si te apetece una solución de bash (al menos 4)
shopt -s globstar
for file in **; do echo ${file##*/}; done
Si su búsqueda no tiene una opción -printf, también puede usar basename:
find ./dir1 -type f -exec basename {} /;
Use -execdir que contiene automáticamente el archivo actual en {} , por ejemplo:
find . -type f -execdir echo ''{}'' '';''
También puedes usar $PWD lugar de . (en algunos sistemas no producirá un punto adicional en la parte frontal).
Si todavía tienes un punto extra, alternativamente puedes correr:
find . -type f -execdir basename ''{}'' '';''
-execdir utility [argument ...] ;El
-execdirprimario es idéntico al-execprimario, con la excepción de que la utilidad se ejecutará desde el directorio que contiene el archivo actual .
Cuando se usa + lugar de ; , entonces {} se reemplaza con tantos nombres de ruta como sea posible para cada invocación de utilidad. En otras palabras, imprimirá todos los nombres de archivo en una línea.