uaf0x
@uaf0x
Всего понемногу

Как получить все каталоги в массив и пройтись по ним аналогом foreach?

Собственно, знатоки :)

Как организовать проход по циклу, чтобы использовать каждый элемент ?

Вот что есть сейчас но он показывает всё как 1 элемент

declare -a files=`ls PATH`
  • Вопрос задан
  • 231 просмотр
Решения вопроса 1
AlekseyNemiro
@AlekseyNemiro
full-stack developer
Можно использовать find:
find /etc/* | while read -r path; do 
  if [[ -f "$path" ]]; then 
    printf "Файл: %s\n" "$path"; 
  elif [[ -d "$path" ]]; then
    printf "Мамка: %s\n" "$path"; 
  fi
done

/etc/* - путь поиска. В данном случае будут получены все файлы и папки каталога /etc.

При помощи дополнительных параметров, можно ограничить выборку.
Например, ограничиться текущим уровнем: -maxdepth 0.
Найти только каталоги: -type d.
Или только файлы: -type f.
find /etc/* -maxdepth 0 | while read -r path; do 
  if [[ -f "$path" ]]; then 
    printf "Файл: %s\n" "$path"; 
  elif [[ -d "$path" ]]; then
    printf "Папка: %s\n" "$path"; 
  fi
done

Для получения подробностей см. find --help.

Если все еще нужен будет массив, то можно сформировать в цикле:
declare -a files

find /etc/* -maxdepth 0 -type f | while read -r path; do
  files+=("$path")
done
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Z-r
> declare -a files=`ls $MY_PATH`

cd "$MY_PATH"
files=( */ )


(И вообще, мне не известно ни единого примера, когда использование утилиты ls в программе на Баше оправдано.)

Но если вам по ним цикл нужен, то массив здесь, собственно, ни к чему:

for file in */; do 
    echo "$file"
done
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы