¿Cómo hago para hacer eco solo del nombre de archivo de un archivo si itero un directorio con un bucle for?
for filename in /home/user/*
do
echo $filename
done;
extraerá la ruta completa con el nombre del archivo. Solo quiero el nombre del archivo.
${file##*/}
a"${file##*/}"
para admitir nombres de archivo con espacios, por ejemplo, "Mi nombre de archivo con espacios.txt".Solo usa
basename
:Las comillas son necesarias en caso de que $ filename contenga, por ejemplo, espacios.
fuente
$()
como lo hizo Oli/test 1
,basename $(pwd)
salida:test
. Probado en OS X y Ubuntu Server (14.04). La solución nativa de bash, como lo recomendó @SiegeX, es lo que funcionó para mí.basename "$(pwd)"
lugar.$PWD
lugar de ejecutar el comando.Utilizar
basename
:fuente
echo
?basename
ya imprime los resultados.echo
incluso puede alterar el resultado si no cita la subcapa. Ejemplo:echo $(basename path/with\ \ spaces)
imprime incorrectamentewith spaces
(solo un espacio).Otro enfoque es utilizarlo
ls
al leer la lista de archivos dentro de un directorio para darle lo que desea, es decir, "solo el nombre del 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:
Si está ejecutando el script en el mismo directorio que los archivos, simplemente se convierte en:
fuente
ls
incluye cualquier archivo de puntos donde la*
expansión normalmente no lo hace. Tambiénfor f in $(...) ...
falla si algún nombre de archivo contiene espacios en blanco a menos que establezca IFS, puede fallar si algún nombre de archivo contiene un carácter glob a menos que establezca -f / -o noglob, y dependiendo del sistema o shellecho
puede fallar si algún nombre de archivo es guión + letra o contiene barra invertida. OTOHls -1 /path/to/dir
por sí solo imprime de manera confiable cada nombre de archivo en una línea, módulo la diferencia de dotfiles.si solo desea el nombre de archivo:
para obtener más información sobre el
cut
comando, consulte aquí .fuente