Trova più file contemporaneamente tramite Terminale

0

Ho una lista di nomi di file come questa:

P1020804.JPG
P1020805.JPG
P1020806.JPG
P1020807.JPG
P1020808.JPG

Come trovarli al meglio per singola query in Spotlight, Terminal, mdfind o locate?

    
posta junna 05.07.2017 - 22:49
fonte

3 risposte

3

Immagino che il tuo elenco sia solo un elenco rappresentativo e i nomi di file seguano quel modello e potrebbero effettivamente essere più di quelli nomi di file esatti. Quindi, l'uso di un'espressione regolare estesa verrà utilizzato per trovare i file che corrispondono al modello mostrato nei nomi dei file di esempio nel tuo OP .

find -E . -regex '.*\/P[0-9]{7}\.JPG'
  • -E Interpretazione di espressioni regolari seguite da -regex e -iregex primari come espressioni regolari (moderne) estese piuttosto che espressioni regolari di base (BRE). La pagina di manuale re_format(7) descrive completamente entrambi i formati.
  • . Cerca la directory corrente e le sue sottodirectory.
  • -regex pattern True se l'intero percorso del file corrisponde a un modello utilizzando l'espressione regolare.
  • %codice%
    • .*\/P[0-9]{7}\.JPG corrisponde a qualsiasi carattere (eccetto per i terminatori di riga).
    • .* Quantifier - Incontri tra zero e un numero illimitato di volte, il più volte possibile, restituendo se necessario (avido).
    • * corrisponde al carattere \/ letteralmente (distinzione tra maiuscole e minuscole).
    • P corrisponde al carattere / letteralmente (distinzione tra maiuscole e minuscole).
    • P corrisponde a un singolo personaggio presente nell'elenco.
    • [0-9] Quantifier - Corrisponde esattamente a 7 volte, {7} un singolo carattere nell'intervallo tra 0-9 (indice 48) e 0 (indice 57) (distinzione tra maiuscole e minuscole).
    • 9 corrisponde al carattere \. letteralmente (distinzione tra maiuscole e minuscole).
    • JPG corrisponde ai caratteri . letteralmente (distinzione tra maiuscole e minuscole).
$ find -E . -regex '.*\/P[0-9]{7}\.JPG'
./Pictures/P1020799.JPG
./Pictures/P1020800.JPG
./Pictures/P1020801.JPG
./Pictures/P1020802.JPG
./Pictures/P1020803.JPG
./Pictures/P1020804.JPG
./Pictures/P1020805.JPG
./Pictures/P1020806.JPG
./Pictures/P1020807.JPG
./Pictures/P1020808.JPG
./Pictures/P1020809.JPG
./Pictures/P1020810.JPG
$

Nota: JPG è la directory di lavoro corrente, che per impostazione predefinita se hai appena aperto Terminal sarà la tua directory Home. Se i file si trovano altrove, puoi utilizzare un percorso di partenza diverso, ad es. . inizierà nella radice di Macintosh HD, (assumendo la denominazione predefinita). Come puoi vedere nell'output di esempio, i nomi dei file di destinazione trovati dalla pattern regex erano nella mia cartella Pictures.

    
risposta data 06.07.2017 - 06:30
fonte
1

Prova questo:

find . -name 'P1020804.JPG' -o -name 'P1020805.JPG' -o -name 'P1020806.JPG'

Ricorda che . è necessario.

    
risposta data 05.07.2017 - 23:25
fonte
1
find . \( -name P1020804.JPG -o \
          -name P1020805.JPG -o \
          -name P1020806.JPG -o \
          -name P1020807.JPG -o \
          -name P1020808.JPG \)

find nella directory corrente- . e sottodirectory, il nome del file o il nome del file successivo ... e così via.

    
risposta data 05.07.2017 - 23:34
fonte

Leggi altre domande sui tag