Для файлов в каталоге, только имя файла echo (без пути)


Как я могу повторить только имя файла файла, если я повторяю каталог с циклом for?

for filename in /home/user/*
do
  echo $filename
done;

потянет полный путь с именем файла. Мне просто нужно имя файла.

4 68

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 содержит, например, пробелы.

использовать basename:

echo $(basename /foo/bar/stuff)

другой подход заключается в использовании ls при чтении списка файлов в каталоге, чтобы дать вам то, что вы хотите, т. е. "просто имя файла/с". В отличие от чтения полного пути к файлу и последующего извлечения компонента "имя файла" в теле цикла for.

пример ниже, который следует за вашим оригиналом:

for filename in $(ls /home/user/)
do
  echo $filename
done;

Если вы запускаете скрипт в том же каталоге, что и файлы, то он просто становится:

for filename in $(ls)
do
  echo $filename
done;