Мне нужно создать сценарий для выполнения команды CLI внутри каждого подкаталога Представьте, что у меня есть основной прямой и внутри 3 подкаталоги. Мне нужно зациклиться в каждом подкаталоге и выполнить действие
В PHP я попробую что-то вроде
foreach( $paths as $path){
//do something
}
Мой полный сценарий (из комментария)
#!/bin/bash
path=/home/sebastien/projets/XXXX/customers/Sites/
today=$(date +%s)
for d in $path; do
[ -L "${d%/}" ] && continue
echo "$d"
orig=$(stat -c %y ${d} )
epoch=$(date -d "${orig}" +"%s")
diff=$(($today-$epoch))
jour=$(($diff/86400))
echo $jour
if [ "$jour" -ge 4 ] then
cd $d #lando rebuild --y
fi
done
Как это сделать в скрипте bash, пожалуйста?
3 ответа
Вы можете сделать что-то вроде
paths=(dir1 dir2)
for path in "${paths[@]}"
do
echo "$path"
done
Мне нужно зациклиться в каждом подкаталоге и выполнить действие
Тогда сделай это.
for i in */; do
action "$i"
done
current=$PWD
, чтобы сохранить текущий каталог, а затем после cd "$d" #lando rebuild --y
(добавлены двойные кавычки) добавить cd "$current"
в качестве следующей строки, чтобы вернуться в рабочий каталог.
С версией GNU bash >= 4.0:
# Enable globstar feature
shopt -s globstar
# glob for all directories recursive and remove trailing /
for dir in **/; do echo "${dir/%\//}"; done
# Disable globstar feature
shopt -u globstar
См .: man bash
/
: "${dir%/}"
Похожие вопросы
Новые вопросы
bash
Для вопросов о скриптах, написанных для командной оболочки Bash. Для сценариев оболочки с ошибками / синтаксическими ошибками, пожалуйста, проверьте их с помощью программы shellcheck (или на сервере веб-проверки оболочки по адресу https://shellcheck.net) перед размещением здесь. Вопросы об интерактивном использовании Bash, скорее всего, будут касаться темы Super User, а не переполнения стека.
I wilt try something like
Как это будет перебирать подкаталоги каталога?path
выше — это один каталог. См. ответы ниже, используя либоfor d in */; do
, либоfor d in **/; do
(после установкиglobstar
)