Для файлов в каталоге только имя файла echo (нет пути)
Как я могу повторять только имя файла, если я перебираю каталог с циклом for?
for filename in /home/user/*
do
echo $filename
done;
вытащит полный путь с именем файла. Мне просто нужно имя файла.
Ответ 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;
Если вы запускаете скрипт в том же каталоге, что и файлы, он просто становится: