Я обнаружил, что это работает, если вы используете bootloader-id="Windows Boot Manager"
. Похоже, что это жестко закодировано в ноутбуке Acer Aspire.
Используйте basename
, чтобы удалить начальный путь из файлов:
for file in sample/*; do
echo "$(basename "$file")"
done
Хотя почему бы и нет:
( cd sample; ls )
Предполагая, что ваша оболочка поддерживает это, вы можете использовать расширение параметра
for path in sample/*; do
printf -- '%s\n' "${path##*/}"
done
или просто перейти в этот каталог и выполнить там листинг
Это зависит от того, что вы хотите делать с каталогами.
Чтобы просто вывести имя, без проверки, является ли оно каталогом, можно использовать ls:
ls -1 sample
Лучше find, потому что можно использовать фильтры:
find sample -type d -maxdepth 1 -printf '%f\n'
Если вы хотите выполнять команды для файлов, вам следует использовать find, а не цикл for:
find sample -type d -maxdepth 1 -exec basename {} \;
Поскольку *nix-системы позволяют практически любому символу быть частью имени файла (включая пробелы, новые строки, запятые, символы труб и т.д.), вы никогда не должны анализировать вывод команды "ls" в сценарии оболочки. Это ненадежно. См. Почему не следует анализировать вывод команды ls.
Используйте команду "find" для создания списка файлов. Если вы используете Bash, вы можете вставить вывод "find" в массив. Пример ниже, с оговоркой, что я использовал нерабочую команду "curl"!
searchDir="sample/"
oldFiles=()
while IFS= read -r -d $'\0' foundFile; do
oldFiles+=("$foundFile")
done < <(find "$searchDir" -maxdepth 1 -type f -print0 2> /dev/null)
if [[ ${#oldFiles[@]} -ne 0 ]]; then
for file in "${oldFiles[@]}"; do
curl -F ‘data=@"$file"’ UPLOAD_ADDRESS
done
fi