Tato otázka již má odpovědi zde :
Odpověď
Musíte pouze pro vytvoření seznamu glob vyhovujících souborů oddělených mezerou:
for file in .* *; do echo "$file"; done
Upravit
Výše uvedený lze přepsat v jiné formě pomocí rozšíření složené závorky
for file in {.*,*}; do echo "$file"; done
nebo dokonce kratší : for file in {.,}*; do echo "$file"; done
Přidání cesty pro vybrané soubory:
for file in /path/{..?,.[!.],}*; do echo "$file"; done
Přidání cesty pro vybrané soubory:
for file in /path/{.,}*; do echo "$file"; done
Pokud chcete být propracovaní a odstranit ze seznamu obvykle nepotřebné . a
stačí změnit {.,}* na {..?,.[!.],}*.
Pro úplnost stojí za to za zmínku, že lze také nastavit dotglob tak, aby odpovídal dot-souborům s čistými *.
shopt -s dotglob
V zsh je třeba dodatečně nastavit nullglob, aby se zabránilo chybě v případě nesouladu:
setopt nullglob
nebo alternativně přidejte do vzoru kvalifikátor glob N:
for file in /path/{.,}*(N); do echo "$file"; done
for file in dir/.* dir/*; do.*odpovídá.a..(kromě zsh).*zůstane*, pokud neexistuje odpovídající soubor.shopt -s gotglobje pouze v bash.zsh: no matches found: .*, když v této odpovědi spustím příkaz (y) . Proč by se to stalo? Soubor v adresáři zobrazuje soubory.zshvrátí chybu, pokud nějaký vzor ne zápasy. Chcete-li tomu zabránit, spusťtesetopt nullglob, který tuto funkci globálně vypne, nebo přidejte kvalifikátor(N)za globální hvězdu, tj .:for file in /path/{.,}*(N); do echo "$file"; done.