2011-12-15 15 views
35

ls /home/user/new/*.txt imprime todos los archivos TXT en ese directorio. Sin embargo se imprime la salida de la siguiente manera:para mostrar sólo el nombre del archivo sin la totalidad de la ruta del directorio

[[email protected]]$ ls /home/user/new/*.txt 
/home/user/new/file1.txt /home/user/new/file2.txt /home/user/new/file3.txt 

y así sucesivamente.

Quiero ejecutar el comando ls no desde el directorio /home/user/new/ por lo tanto tengo que dar el nombre del directorio completo, sin embargo, yo quiero que la salida sea sólo como

[[email protected]]$ ls /home/user/new/*.txt 
file1.txt file2.txt file3.txt 

no quiero que todo el recorrido . Solo se necesita el nombre de archivo. Este problema debe resolverse utilizando el comando ls, ya que su resultado está destinado a otro programa.

+0

¿Qué sistema operativo? Por ejemplo, OS X hace lo que quiere ya. ¿Estás seguro de que ls no tiene alias? –

Respuesta

60

ls whateveryouwant | xargs -n 1 basename

funciona eso para usted?

lo contrario, puede (cd /the/directory && ls) (sí, la intención paréntesis)

+0

Sí, funcionó. Muchas gracias. – Ashish

+2

que es mejor usar 'ls -d' en el caso' whateveryouwant' se refiere a varios directorios. –

+3

Tenga en cuenta que si la ruta contiene espacios, los xargs se romperán en ellos. Necesitarás usar 'xargs -d '\ n' -n 1' en su lugar. – Zitrax

7

Hay varias maneras de lograr esto. Una de ellas sería algo así como:

for filepath in /path/to/dir/* 
do 
    filename=$(basename $file) 

    ... whatever you want to do with the file here 
done 
4

Se podría añadir un comando especialmente a su línea de comandos:

ls /home/user/new/*.txt | sed -r 's/^.+\///' 
1

Yo prefiero el nombre de la base que ya está contestada por FGE. Otra forma es:

ls /home/user/new/*.txt|awk -F"/" '{print $NF}' 

una forma más fea es:

ls /home/user/new/*.txt| perl -pe 's/\//\n/g'|tail -1 
4

Una forma elegante de resolver es mediante el uso de dos veces "revoluciones" y "cortar":

find ./ -name "*.txt" | rev | cut -d '/' -f1 | rev 
29

No es necesario para Xargs y todo, es más que suficiente.

ls -1 *.txt 

pantallas fila sabia

+8

Esto no es correcto si lee el OP con cuidado. Esto solo funciona si estás en ese directorio. –

+0

¡Funciona a la perfección! Gracias @VRVigneshwara! 'ls -1 bin /' lista las entradas dentro de bin/directorio sin ruta en Linux Debian. –

0

sólo con la esperanza de ser útil a alguien tan viejos problemas parecen volver de vez en cuando y siempre encontrar buenos consejos aquí.

Mi problema era a la lista en un archivo de texto todos los nombres de los "* .txt" los archivos en un directorio determinado y sin ruta y sin extensión de una secuencia de 7,5 Datastage.

La solución que utilizamos es:

ls /home/user/new/*.txt | xargs -n 1 basename | cut -d '.' -f1 > name_list.txt 
2

(cd dir ; ls)

hará sólo los nombres de archivo de salida en dir. Utilice ls -1 si quieres uno por línea.

Cuestiones relacionadas