Ответ 1
ls whateveryouwant | xargs -n 1 basename
Это работает для вас?
В противном случае вы можете (cd /the/directory && ls)
(да, в скобках)
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, поскольку ее вывод предназначен для другой программы.
ls whateveryouwant | xargs -n 1 basename
Это работает для вас?
В противном случае вы можете (cd /the/directory && ls)
(да, в скобках)
Нет необходимости в Xargs и всех, ls более чем достаточно.
ls -1 *.txt
отображает строку wic
Есть несколько способов добиться этого. Можно было бы что-то вроде:
for filepath in /path/to/dir/*
do
filename=$(basename $file)
... whatever you want to do with the file here
done
(cd dir ; ls)
выводит только имена файлов в директории. Используйте ls -1
, если хотите одну строку.
вы можете добавить sed script в свою командную строку:
ls /home/user/new/*.txt | sed -r 's/^.+\///'
Приятный способ решить эту проблему - использовать дважды "rev" и "cut":
find ./ -name "*.txt" | rev | cut -d '/' -f1 | rev
Я предпочитаю базовое имя, на которое уже ответил fge. Другой способ:
ls /home/user/new/*.txt|awk -F"/" '{print $NF}'
еще один уродливый способ:
ls /home/user/new/*.txt| perl -pe 's/\//\n/g'|tail -1
просто надеясь быть полезным для кого-то, поскольку старые проблемы, кажется, возвращаются все время от времени, и я всегда нахожу здесь полезные советы.
Моя проблема заключалась в том, чтобы перечислить в текстовом файле все имена файлов "*.txt" в определенном каталоге без пути и без расширения из последовательности Datastage 7.5.
Используемое решение:
ls /home/user/new/*.txt | xargs -n 1 basename | cut -d '.' -f1 > name_list.txt
Есть много способов, которыми мы можем сделать это, и просто вы можете попробовать следовать.
ls /home/user/new | tr '\n' '\n' | grep .txt
Другой метод:
cd /home/user/new && ls *.txt
Выбранный ответ не работал для меня, так как в именах файлов были пробелы, кавычки и другие странные символы. Чтобы процитировать ввод для basename
, вы должны использовать:
ls /path/to/my/directory | xargs -n1 -I{} basename "{}"
Это гарантированно работает независимо от того, как называются файлы.