GNU/Linux >> Linux Esercitazione >  >> Linux

Come eseguire un ciclo for-each su tutti i file in un percorso specificato?

Il for -loop ripeterà ogni voce (separata da spazi) sulla stringa fornita.

In realtà non esegui il find comando, ma forniscilo come stringa (che viene ripetuta dal for -loop).Invece delle doppie virgolette usa i backtick o $() :

for line in $(find . -iname '*.txt'); do 
     echo "$line"
     ls -l "$line"
done

Inoltre, se i percorsi/nomi dei file contengono spazi, questo metodo fallisce (poiché il file for -loop itera su voci separate da spazi). Invece è meglio usare il metodo descritto nella risposta di dogbanes.

Per chiarire il tuo errore:

Come detto, for line in "find . -iname '*.txt'"; itera su tutte le voci separate da spazi, che sono:

  • trova
  • .
  • -iname
  • '*.txt' (credo...)

I primi due non generano un errore (oltre al comportamento indesiderato), ma il terzo è problematico in quanto esegue:

ls -l -iname

Molti comandi (bash) possono combinare opzioni a carattere singolo, quindi -iname è uguale a -i -n -a -m -e . E voilà:il tuo invalid option -- 'e' errore!


Ecco un modo migliore per scorrere i file in quanto gestisce gli spazi e le nuove righe nei nomi dei file:

#!/bin/bash

find . -type f -iname "*.txt" -print0 | while IFS= read -r -d $'\0' line; do
    echo "$line"
    ls -l "$line"    
done

Usa la sostituzione di comando invece delle virgolette per eseguire find invece di passare il comando come stringa:

for line in $(find . -iname '*.txt'); do 
     echo $line
     ls -l $line; 
done

Versione più compatta che funziona con spazi e newline nel nome del file:

find . -iname '*.txt' -exec sh -c 'echo "{}" ; ls -l "{}"' \;

Linux
  1. Come sostituire un carattere con un altro in tutti i nomi di file delle directory correnti?

  2. Come trovare tutti i file relativi a un software?

  3. Come utilizzare il comando trova di Linux per trovare i file

  4. Come trovo la posizione dell'eseguibile in C?

  5. Come ottenere tutti i file che superano determinate dimensioni ed eliminarli

Come trovare file in Linux con il comando Trova

Come trovare i file usando la riga di comando nel terminale Linux

Come trovare file con il comando fd in Linux

Come verificare la presenza di file di grandi dimensioni nella console

Come scorrere le righe di un file?

Come eseguire la ricerca Grep su tutti i file e in tutte le directory