2012-01-25 16 views

Respuesta

106

Si desea una solución nativa bash

for file in /home/user/*; do 
    echo ${file##*/} 
done 

El anterior utiliza parámetro de expansión que es nativa de la cáscara y no requiere una llamada a un binario externo, como basename

Sin embargo, podría sugerir simplemente usando find

find /home/user -type f -printf "%f\n" 
+7

Buena respuesta. Para aquellos interesados ​​en aprender más sobre la expansión de parámetros: http://wiki.bash-hackers.org/syntax/pe#substring_removal – DougW

+0

-printf: unknown primary or operator – Matthew

32

Sólo tiene que utilizar basename:

echo `basename "$filename"` 

son necesarias las comillas en el caso, por ejemplo, $ nombre de archivo contiene espacios.

+0

Gracias. Sencillo. – Mechaflash

+2

mejor para usar la expansión de parámetros, no requiere llamadas a binarios externos. – SiegeX

+4

Por cierto, '' está en desuso. Es mejor usar '$()' como Oli lo hizo – SiegeX

12

Uso basename:

echo $(basename /foo/bar/stuff) 
Cuestiones relacionadas