Вот один из способов сделать это без использования ls
, и, что еще хуже, вы используете флаг -al
.
#!/usr/bin/env bash
shopt -s nullglob extglob
files=(/path/to/www/directory/!(ubuntu|test)/)
declare -p files
Это покажет вам файлы в назначении массива.
Если вы хотите l oop через файлы и удалить путь к файлу из имени файла без использования каких-либо внешних команд из оболочки.
for f in "${files[@]}"; do echo "${f##*/}"; done
Который имеет тот же результат при использовании basename
for f in "${files[@]}"; do var=$(basename "$f"); echo "$var"; done
Или просто сделать это в массиве
printf '%s\n' "${files[@]##*/}"
"${files##*/}"
- это форма расширения параметра PE.
Существует онлайн bash руководство, где вы можете посмотреть PE см. Расширение параметра
Или справочную страницу. см. PAGER='less +/^[[:space:]]*parameter\ expansion' man bash
Поиск nullglob
и extglob
см. globbing оболочки
Массив с именем files
теперь содержит данные / файлы, которые вы Заинтересованы.
По умолчанию точечные файлы не указаны в списке, поэтому вам не нужно об этом беспокоиться, если только не включен параметр dotglob
, который по умолчанию отключен.