Dette spørgsmål har allerede svar her :
Svar
Du skal bare bruge for at oprette en liste med glob-matchende filer adskilt af mellemrum:
for file in .* *; do echo "$file"; done
Rediger
Ovenstående kan omskrives i forskellige former ved hjælp af bøjleudvidelse
for file in {.*,*}; do echo "$file"; done
eller endnu kortere : for file in {.,}*; do echo "$file"; done
Tilføjelse af stien til valgte filer:
for file in /path/{..?,.[!.],}*; do echo "$file"; done
Tilføjelse af sti til valgte filer:
for file in /path/{.,}*; do echo "$file"; done
Hvis du vil være sofistikeret og fjerne fra listen normalt unødvendigt . og
Skift bare {.,}* til {..?,.[!.],}*.
For fuldstændighed er det værd at nævne, at man også kan indstille dotglob til at matche dot-filer med ren *.
shopt -s dotglob
I zsh skal man desuden indstille nullglob for at forhindre fejlen i tilfælde af manglende matches:
setopt nullglob
eller alternativt tilføj globkvalifikator N til mønsteret:
for file in /path/{.,}*(N); do echo "$file"; done
for file in dir/.* dir/*; do.*matcher.og..(undtagen i zsh).*forbliver*hvis der ikke er nogen matchende fil.shopt -s gotglober kun i bash.zsh: no matches found: .*, når jeg kører kommand (er) i dette svar . Hvorfor skulle dette ske? ls i biblioteket viser filerne.zshreturnerer fejl, hvis noget mønster ikke Tændstikker. For at forhindre det kørsetopt nullglob, som vil slå denne funktion fra globalt, eller tilføj kvalifikator(N)efter globstjernen, dvs.:for file in /path/{.,}*(N); do echo "$file"; done.