Vous pouvez parcourir en boucle tous les répertoires, y compris les répertoires cachés (commençant par un point) avec :
for file in */ .*/ ; do echo "$file is a directory"; done
note : en utilisant la liste */ .*/
ne fonctionne dans zsh que s'il existe au moins un répertoire caché dans le dossier. En bash, il affichera également .
y ..
Une autre possibilité pour bash d'inclure des répertoires cachés serait d'utiliser :
shopt -s dotglob;
for file in */ ; do echo "$file is a directory"; done
Si vous voulez exclure les liens symboliques :
for file in */ ; do
if [[ -d "$file" && ! -L "$file" ]]; then
echo "$file is a directory";
fi;
done
Pour n'afficher que le nom du répertoire de queue (A,B,C en question) dans chaque solution, utilisez ceci dans les boucles :
file="${file%/}" # strip trailing slash
file="${file##*/}" # strip path and leading slash
echo "$file is the directoryname without slashes"
Exemple (cela fonctionne également avec les répertoires qui contiennent des espaces) :
mkdir /tmp/A /tmp/B /tmp/C "/tmp/ dir with spaces"
for file in /tmp/*/ ; do file="${file%/}"; echo "${file##*/}"; done
0 votes
Ça va ici : Comment boucler uniquement sur les répertoires en bash ?
0 votes
Réseau solide sous bash (en acceptant les noms de domaine espacés) :
dirs=(/tmp/*/);dirs=("${dirs[@]%/}");dirs=("${dirs[@]#/tmp/}")
entoncesprintf "%s\n" "${dirs[@]}"
ofor dir in "${dirs[@]}" ;do ...