Terminale: aggiunta logica per "trovare" directory contenenti [criterio A] o [criterio B]

1

Ho ereditato un vasto archivio multimediale senza uno schema organizzativo unificante. I suoi contenuti risalgono ad almeno 10 anni. Mi è stato chiesto di trovare un ago in questa pila di fieno, e ho qualche ipotesi sul nome dell'ago. Ma non so per certo il suo nome. Voglio utilizzare un singolo comando find nel Terminale per cercare nomi alternativi. E voglio includere un secondo set: possibili estensioni di file. In pseudocodice, ecco cosa intendo: find [in a given directory] [files and folders whose name matches (*guess1* OR *guess2*) AND whose name matches (*.extension1 OR *.extension2)] . Come dovrei esprimerlo nel terminale?

    
posta Crowder 01.05.2014 - 17:18
fonte

4 risposte

3

Puoi farlo usando ls e grep con le espressioni regolari

ls | grep -E "(guess1|guess2)(\.extension1|\.extension2)"

O se devi cercare in modo ricorsivo nelle cartelle:

ls -R | grep -E "(guess1|guess2)(\.extension1|\.extension2)"
    
risposta data 01.05.2014 - 17:40
fonte
2

Utilizza il comando

find /dir/to/search \( -iname '*guess1*' -o -iname '*guess2*' \) \
                    \( -iname '*.extension1' -o -iname '*.extension2' \)

find funziona in modo ricorsivo. Usa -maxdepth 1 per renderlo non ricorsivo.

-iname corrisponde al nome del file senza distinzione tra maiuscole e minuscole.

Gli argomenti sono implicitamente uniti da AND, ma puoi usare -o per renderlo OR. Le parentesi devono essere sottoposte a escape con un backslash per proteggerle dalla shell.

(Potrebbe essere scritto tutto su una riga, qui ho rotto le righe usando \ return per la leggibilità.)

    
risposta data 01.05.2014 - 23:40
fonte
1

Se il volume è indicizzato da Spotlight, utilizza mdfind per risultati più rapidi.

mdfind -onlyin /dir/to/search '(kMDItemFSName==*guess1* || kMDItemFSName==*guess2*)' \
                     '&& (kMDItemFSName=*.extension1 || kMDItemFSName=*.extension2)'
    
risposta data 01.05.2014 - 23:59
fonte
1

find è lento. grep e altri strumenti di ricerca testo sono molto più veloci. A meno che non pensi di trovare l'ago nel pagliaio con il primo colpo, probabilmente stai meglio facendo un find in un file temporaneo, ad es. find . -print > /tmp/find.out , quindi cerca in quel file i nomi dei file che soddisfano i tuoi criteri di ricerca.

    
risposta data 01.05.2014 - 21:47
fonte

Leggi altre domande sui tag