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 gotglob
est 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.zsh
renvoie une erreur si un modèle non allumettes. Pour empêcher cette exécutionsetopt nullglob
qui 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
.