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 gotglob
er 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.zsh
returnerer 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
.