Réponse
Vous avez juste besoin pour créer une liste de fichiers globaux correspondants, séparés par un espace:
for file in .* *; do echo "$file"; done
Modifier
Ce qui précède peut réécrire sous une forme différente en utilisant lexpansion daccolades
for file in {.*,*}; do echo "$file"; done
ou même plus court : for file in {.,}*; do echo "$file"; done
Ajout du chemin pour les fichiers sélectionnés:
for file in /path/{..?,.[!.],}*; do echo "$file"; done
Ajout du chemin pour les fichiers sélectionnés fichiers:
for file in /path/{.,}*; do echo "$file"; done
Si vous voulez être sophistiqué et supprimer de la liste généralement inutile . et
remplacez simplement {.,}* par {..?,.[!.],}*.
Pour être complet, cela vaut la peine pour mentionner que lon peut également définir dotglob pour quil corresponde aux fichiers de points avec *.
shopt -s dotglob
Dans zsh, il faut en plus définir nullglob pour éviter lerreur en cas de non-correspondance:
setopt nullglob
ou ajoutez le qualificatif global N au modèle:
for file in /path/{.,}*(N); do echo "$file"; done
for file in dir/.* dir/*; do.*correspond à.et..(sauf en zsh).*reste*sil ny a pas de fichier correspondant.shopt -s gotglobest uniquement en bash.zsh: no matches found: .*lorsque jexécute la ou les commandes dans cette réponse . Pourquoi cela arriverait-il? ls sur le répertoire montre les fichiers.zshrenvoie une erreur si un modèle non allumettes. Pour empêcher cette exécutionsetopt nullglobqui désactivera globalement cette fonctionnalité, ou ajoutez le qualificatif(N)après létoile globale, soit:for file in /path/{.,}*(N); do echo "$file"; done.