Відповіді:
Якщо вам потрібне власне bashрішення
for file in /home/user/*; do
echo "${file##*/}"
done
Вище використовується розширення параметрів, яке є рідним для оболонки і не вимагає виклику зовнішнього двійкового файлу, такого якbasename
Однак, чи можу я запропонувати просто використовувати find
find /home/user -type f -printf "%f\n"
${file##*/}на, "${file##*/}"щоб підтримати імена файлів із пробілами, наприклад "Моє ім'я файлу з пробілами.txt".
Просто використовуйте basename:
echo `basename "$filename"`
Лапки потрібні, якщо $ filename містить, наприклад, пробіли.
$()як робив Олі
/test 1, basename $(pwd)вихід: test. Тестується на OS X та Ubuntu Server (14.04). Власне рішення bash, як рекомендував @SiegeX, саме для мене спрацювало.
basename "$(pwd)"замість цього.
$PWDзамість запуску команди.
Використання basename:
echo $(basename /foo/bar/stuff)
echo? basenameвже друкує результати. echoможе навіть забруднити результат, якщо ви не цитуєте передплату. Приклад: echo $(basename path/with\ \ spaces)неправильно друкує with spaces(лише один пробіл).
Іншим підходом є використання lsпід час читання списку файлів у каталозі, щоб дати вам те, що ви хочете, тобто "просто ім'я / файли файлів". На відміну від читання повного шляху до файлу, а потім вилучення компонента "ім'я файлу" в тілі циклу for.
Приклад нижче, який слідує за вашим оригіналом:
for filename in $(ls /home/user/)
do
echo $filename
done;
Якщо ви запускаєте сценарій в тому ж каталозі, що і файли, він просто стає:
for filename in $(ls)
do
echo $filename
done;
lsвключає будь-які крапкові файли, де *розширення, як правило, немає. Також for f in $(...) ...не вдається, якщо будь-яке ім'я файлу містить пробіл, якщо ви не встановили IFS, може бути невдалим, якщо будь-яке ім'я файлу містить глобальну таблицю, якщо ви не встановите -f / -o noglob, і залежно від системи або оболонки echoможе вийти з ладу, якщо будь-яке ім'я файлу є дефісом + літерою або містить зворотну косу рису. OTOH просто ls -1 /path/to/dirсам по собі надійно друкує кожне ім'я файлу в рядку, за модулем різниці точкових файлів.