modo corretto di scorrere i contenuti in una directory [duplicate]

Questa domanda ha già una risposta qui :

Risposta

Hai solo bisogno per creare un elenco di file corrispondenti glob, separati da uno spazio:

for file in .* *; do echo "$file"; done 

Modifica

Quello sopra può riscrivere in forma diversa usando lespansione delle parentesi graffe

 for file in {.*,*}; do echo "$file"; done 

o anche più breve : for file in {.,}*; do echo "$file"; done

Aggiunta del percorso per i file selezionati:

 for file in /path/{..?,.[!.],}*; do echo "$file"; done 

Aggiunta del percorso per i file selezionati file:

 for file in /path/{.,}*; do echo "$file"; done 

Se vuoi essere sofisticato e rimuovere dallelenco di solito non necessari . e

basta cambiare {.,}* in {..?,.[!.],}*.

Per completezza vale la pena per menzionare che si può anche impostare dotglob in modo che corrisponda a file punto con *.

shopt -s dotglob 

In zsh è necessario inoltre impostare nullglob per evitare lerrore in caso di mancata corrispondenza:

setopt nullglob 

o, in alternativa, aggiungi il qualificatore glob N al pattern:

for file in /path/{.,}*(N); do echo "$file"; done 

Commenti

  • Grazie mille! Quindi, se voglio scorrere qualsiasi directory, metto semplicemente il nome della directory davanti a ciascuno degli elementi, giusto? come for file in dir/.* dir/*; do
  • ' non è così facile. .* corrisponde a . e .. (tranne che in zsh). * rimane * se non è presente alcun file corrispondente. shopt -s gotglob è solo in bash.
  • Ricevo zsh: no matches found: .* quando eseguo i comandi in questa risposta . Perché dovrebbe succedere? È nella directory che mostra i file.
  • @Niyaz che ' s perché zsh restituisce un errore se qualche pattern no partite. Per evitare che venga eseguito setopt nullglob che disattiverà questa funzione a livello globale, oppure aggiungi il qualificatore (N) dopo la stella glob, ad esempio: for file in /path/{.,}*(N); do echo "$file"; done.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *