У меня есть папка с именем sample и в ней 3 файла. Я хочу написать скрипт оболочки, который будет читать эти файлы в папке с образцами и публиковать их на сайте HTTP с помощью curl.
Я написал следующее для перечисления файлов внутри папки:
for dir in sample/*; do
echo $dir;
done
Но это дает мне следующий вывод:
sample/log
sample/clk
sample/demo
Он прикрепляет родительскую папку в нем. Я хочу вывод следующим образом (без имени родительской папки)
log
clk
demo
Как мне это сделать?
shell-script
files
directory
for
Раджи
источник
источник
echo ${dir##*/}
чтобы убрать путь.Ответы:
Используйте
basename
для удаления начального пути из файлов:Хотя почему бы и нет
источник
Предполагая, что ваша оболочка поддерживает это, вы можете использовать расширение параметров
или вы можете просто перейти в этот каталог и сделать там список
источник
--
не нужно. Первый аргумент - это фиксированная строка без черточек.${parameter##pattern}
поддерживается всеми оболочками POSIX.Поскольку системы * nix допускают, чтобы почти любой символ был частью имени файла (включая пробелы, символы новой строки, запятые, символы канала и т. Д.), Вы никогда не должны анализировать вывод команды "ls" в сценарии оболочки. Это не надежно. Посмотрите, почему вы не должны анализировать вывод ls .
Используйте «найти», чтобы создать список файлов. Если вы используете Bash, вы можете вставить вывод «find» в массив. Пример ниже, с предупреждением, что я использовал нерабочую команду "curl"!
источник
Это зависит от того, что вы хотите сделать с каталогами.
Чтобы просто напечатать имя, без проверки, является ли это каталогом, вы можете использовать ls:
Лучше было бы найти, потому что вы можете использовать фильтры:
Если вы хотите запускать команды для файлов, вы должны использовать find, а не цикл for:
источник