Dette spørsmålet har allerede svar her :
Svar
Du trenger bare for å lage en liste over glob-samsvarende filer, atskilt med mellomrom:
for file in .* *; do echo "$file"; done
Rediger
Ovennevnte kan omskrives i annen form ved hjelp av avstivningsutvidelse
for file in {.*,*}; do echo "$file"; done
eller enda kortere : for file in {.,}*; do echo "$file"; done
Legger til banen for valgte filer:
for file in /path/{..?,.[!.],}*; do echo "$file"; done
Legger til sti for valgte filer:
for file in /path/{.,}*; do echo "$file"; done
Hvis du vil være sofistikert og fjerne fra listen, er det unødvendig .
og
bare endre {.,}*
til {..?,.[!.],}*
.
For fullstendighet er det verdt å nevne at man også kan stille dotglob til å matche dot-filer med ren *
.
shopt -s dotglob
I zsh
trenger man i tillegg å sette nullglob
for å forhindre feilen ved manglende samsvar:
setopt nullglob
eller alternativt legg til glob-kvalifikator N
i mønsteret:
for file in /path/{.,}*(N); do echo "$file"; done
for file in dir/.* dir/*; do
.*
samsvarer med.
og..
(unntatt i zsh).*
forblir*
hvis det ikke er noen samsvarende fil.shopt -s gotglob
er bare i bash.zsh: no matches found: .*
når jeg kjører kommandoen (e) i dette svaret . Hvorfor skulle dette skje? I katalogen vises filene.zsh
returnerer feil hvis noe mønster ikke fyrstikker. For å forhindre at kjøringensetopt nullglob
som vil slå av denne funksjonen globalt, eller legge til kvalifikator(N)
etter globstjernen, dvs.:for file in /path/{.,}*(N); do echo "$file"; done
.