Для файлов в каталоге, только имя файла echo (без пути)
Как я могу повторить только имя файла файла, если я повторяю каталог с циклом for?
for filename in /home/user/*
do
echo $filename
done;
потянет полный путь с именем файла. Мне просто нужно имя файла.
4 ответа:
если вы хотите уроженца
bash
решениеfor file in /home/user/*; do echo ${file##*/} done
выше использует Расширения Параметр который является родным для оболочки и не требует вызова внешнего двоичного файла, такого как
basename
однако, могу ли я предложить просто использовать
find
find /home/user -type f -printf "%f\n"
просто использовать
basename
:echo `basename "$filename"`
кавычки необходимы в случае, если $filename содержит, например, пробелы.
другой подход заключается в использовании
ls
при чтении списка файлов в каталоге, чтобы дать вам то, что вы хотите, т. е. "просто имя файла/с". В отличие от чтения полного пути к файлу и последующего извлечения компонента "имя файла" в теле цикла for.пример ниже, который следует за вашим оригиналом:
for filename in $(ls /home/user/) do echo $filename done;
Если вы запускаете скрипт в том же каталоге, что и файлы, то он просто становится:
for filename in $(ls) do echo $filename done;