2011-12-15 2 views
35

ls /home/user/new/*.txt печатает все файлы txt в этом каталоге. Однако он печатает выходные данные следующим образом:Показать только имя файла без полного пути к каталогу

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

и так далее.

Я хочу, чтобы запустить команду ls не из каталога /home/user/new/, таким образом, я должен дать полное имя каталога, но я хочу выход быть только

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

Я не хочу, чтобы весь путь , Требуется только имя файла. Эти проблемы необходимо решить с помощью команды ls, поскольку ее вывод предназначен для другой программы.

+0

Какая ОС? Например, OS X делает то, что вы хотите. Вы уверены, что это не псевдоним? –

ответ

60

ls whateveryouwant | xargs -n 1 basename

ли эта работа для вас?

В противном случае вы можете (cd /the/directory && ls) (да, круглые скобки предназначены)

+0

Да, это сработало. Большое спасибо. – Ashish

+2

Вы, вероятно, должны использовать 'ls -d' в случае, если' whauteverwant' относится к нескольким каталогам. –

+3

Обратите внимание, что если путь содержит пробелы, они будут разбиваться на них. Вместо этого вам нужно использовать 'xargs -d '\ n' -n 1'. – Zitrax

7

Есть несколько способов достижения этой цели. Можно было бы что-то вроде:

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

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

вы можете добавить SED скрипт в командной строке:

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

Я предпочитаю базовое имя, которое уже ответил на FGE. Другой способ:

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

еще один уродливый способ:

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

Причудливый способ решить это с помощью дважды "изм" и "вырезать":

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

Нет необходимости в Xargs и всех, ls более чем достаточно.

ls -1 *.txt 

отображает ряд мудрая

+8

Неправильно, если вы внимательно прочитаете OP. Это работает только в том случае, если вы находитесь в этом каталоге. –

+0

Работает отлично! Спасибо @VRVigneshwara! 'ls -1 bin /' записывать записи внутри bin/directory без пути в Linux Debian. –

0

просто надеясь быть полезным для кого-то, как старые проблемы, кажется, возвращаются и теперь каждый раз, и я всегда нахожу хорошие советы здесь.

Моя проблема заключалась в том, чтобы отобразить в текстовом файле все имена файлов «* .txt» в определенном каталоге без пути и без расширения из последовательности Datastage 7.5.

Раствор мы использовали:

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

(cd dir ; ls)

будет только выходные имена файлов в реж. Используйте ls -1, если вы хотите по одному в каждой строке.