Показывать только имя файла без полного пути к каталогу - PullRequest
57 голосов
/ 15 декабря 2011

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

[me@comp]$ ls /home/user/new/*.txt
/home/user/new/file1.txt    /home/user/new/file2.txt    /home/user/new/file3.txt

и т. Д.

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

[me@comp]$ ls /home/user/new/*.txt
file1.txt    file2.txt    file3.txt 

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

Ответы [ 9 ]

96 голосов
/ 15 декабря 2011

ls whateveryouwant | xargs -n 1 basename

Это работает для вас?

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

37 голосов
/ 05 сентября 2015

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

ls -1 *.txt

отображает строку

10 голосов
/ 15 декабря 2011

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

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

    ... whatever you want to do with the file here
done
7 голосов
/ 08 июня 2017

(cd dir ; ls)

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

4 голосов
/ 12 ноября 2014

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

find ./ -name "*.txt" | rev | cut -d '/' -f1 | rev
4 голосов
/ 15 декабря 2011

вы можете добавить скрипт sed в вашу командную строку:

ls /home/user/new/*.txt | sed -r 's/^.+\///'
2 голосов
/ 15 декабря 2011

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

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

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

ls /home/user/new/*.txt| perl -pe 's/\//\n/g'|tail -1
0 голосов
/ 14 июня 2019

Существует множество способов сделать это, и вы можете просто попытаться выполнить следующие действия.

ls /home/user/new | tr '\n' '\n' | grep .txt

Другой метод:

cd /home/user/new && ls *.txt
0 голосов
/ 29 марта 2017

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

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

Мы использовали следующее решение:

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