Combina due comandi di ricerca di bash


1

Ne ho due simili find comandi che fondamentalmente ho lo stesso codice per entrambi una volta che il ciclo while ha inizio. Voglio combinarli quindi ne ho solo bisogno find per cercare tra file e directory, anziché uno per cercare le directory e uno per cercare i file. Ecco i due che voglio combinare in un'unica riga:

find "$ORIG_DIR" -name "*" -type d | while read dname

find "$ORIG_DIR" -name "*" -type f | while read fname

Risposte:


0

È possibile fornire più -type opzioni con -o, ad esempio -type d -o -type f in un unico comando.

find "$ORIG_DIR" -name "*" -type d -o -name "*" -type f | while read file

-o corrisponde a tutti i parametri, quindi il -name viene fornito due volte nel comando precedente.


1
@patrix Riscritto, ora non ri-attraversa, e funziona :)
grg

Per il while alla fine, funzionerà questo: while read dname; fname; do lavoro?
Erick

while read fame; do ... done. Potrebbe essere una buona idea per google per "Shell Scripting Primer"
nohillside

0

Puoi usare il comando test per vedere se si tratta di un file o di una cartella:

find "$ORIG_DIR" | while read thing; do
    if [[ -d "$thing" ]]; then
        # do whatever you want to do with the directory
    fi
    if [[ -f "$thing" ]]; then
        # do whatever you want to do with the file
    fi
done
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.