Подтвердить что ты не робот

Отображать только имя файла без всего пути к каталогу

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, поскольку ее вывод предназначен для другой программы.

4b9b3361

Ответ 1

ls whateveryouwant | xargs -n 1 basename

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

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

Ответ 2

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

ls -1 *.txt

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

Ответ 3

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

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

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

Ответ 4

(cd dir ; ls)

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

Ответ 5

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

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

Ответ 6

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

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

Ответ 7

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

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

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

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

Ответ 8

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

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

Используемое решение:

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

Ответ 9

Есть много способов, которыми мы можем сделать это, и просто вы можете попробовать следовать.

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

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

cd /home/user/new && ls *.txt

Ответ 10

Выбранный ответ не работал для меня, так как в именах файлов были пробелы, кавычки и другие странные символы. Чтобы процитировать ввод для basename, вы должны использовать:

ls /path/to/my/directory | xargs -n1 -I{} basename "{}"

Это гарантированно работает независимо от того, как называются файлы.