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

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

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

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

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

4b9b3361

Ответ 1

Если вы хотите нативное решение bash

for file in /home/user/*; do
  echo "${file##*/}"
done

Выше используется расширение параметров, которое является родным для оболочки и не требует вызова внешнего двоичного basename такого как basename

Тем не менее, могу ли я предложить просто find

find /home/user -type f -printf "%f\n"

Ответ 2

Просто используйте basename:

echo `basename "$filename"`

Кавычки необходимы в случае, если $filename содержит, например. пространства.

Ответ 3

Используйте basename:

echo $(basename /foo/bar/stuff)

Ответ 4

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

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

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

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

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