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 gotglober 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.zshreturnerer feil hvis noe mønster ikke fyrstikker. For å forhindre at kjøringensetopt nullglobsom vil slå av denne funksjonen globalt, eller legge til kvalifikator(N)etter globstjernen, dvs.:for file in /path/{.,}*(N); do echo "$file"; done.