bash - una - Para archivos en el directorio, solo se hace eco del nombre de archivo(no hay ruta)
script para listar directorios (4)
¿Cómo hago para repetir solo el nombre de archivo de un archivo si itero un directorio con un bucle for?
for filename in /home/user/*
do
echo $filename
done;
tirará de la ruta completa con el nombre del archivo. Solo quiero el nombre del archivo.
Otro enfoque es utilizar ls
al leer la lista de archivos dentro de un directorio para darle lo que desea, es decir, "solo el / los nombre / s de archivo". A diferencia de leer la ruta completa del archivo y luego extraer el componente "nombre de archivo" en el cuerpo del bucle for.
Ejemplo a continuación que sigue a su original:
for filename in $(ls /home/user/)
do
echo $filename
done;
Si está ejecutando el script en el mismo directorio que los archivos, simplemente se convierte en:
for filename in $(ls)
do
echo $filename
done;
Si quieres una solución bash
nativa
for file in /home/user/*; do
echo ${file##*/}
done
Lo anterior usa la Expansión de Parámetros que es nativa del shell y no requiere una llamada a un binario externo tal como basename
Sin embargo, podría sugerir simplemente usar find
find /home/user -type f -printf "%f/n"
Solo usa el basename
:
echo `basename "$filename"`
Las comillas son necesarias en caso de que $ nombre de archivo contenga, por ejemplo, espacios.
Usar basename
:
echo $(basename /foo/bar/stuff)