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 gotglob
je 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.zsh
vrá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
.