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
-execdir
primario es idéntico al-exec
primario, 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.