elimina i file corrispondenti al modello


32

Devo rimuovere in modo ricorsivo tutti i file in tutti i sottodir in cui il nome file contiene un numero seguito da una 'x' seguito da un numero, almeno due volte.

Esempio:

Vorrei rimuovere questi file:

'aaa-12x123-123x12.jpg'
'aaa-12x12-123x12-12x123.jpg'

Ma NON voglio rimuovere questi file:

'aaa.jpg'
'aaa-12x12.jpg'
'aaaxaaa-123x123.jpg'
'aaaxaaa-aaaxaaa.jpg'

Come posso farlo (dalla shell bash)

Risposte:


61

Una stringa contiene "un numero seguito da un xseguito da un numero" se e solo se contiene una cifra seguita da un xseguito da una cifra, ovvero se contiene una sottostringa corrispondente al modello [0-9]x[0-9]. Quindi stai cercando di rimuovere i file il cui nome corrisponde al modello *[0-9]x[0-9]*[0-9]x[0-9]*.jpg.

find /path/to/directory -type f -name '*[0-9]x[0-9]*[0-9]x[0-9]*.jpg' -delete

Se findnon lo hai -delete, chiama rmper eliminare i file.

find /path/to/directory -type f -name '*[0-9]x[0-9]*[0-9]x[0-9]*.jpg' -exec rm {} +

2
Grazie! 12.000 file spariti i 2 sec. Questo mi ha salvato un po 'di lavoro manuale!
mikkelbreum,

-delete-exec rmlavorato per me in Bash su Windows. Ma questo ha fatto:find /path/to/directory -type f -name '*[0-9]x[0-9]*[0-9]x[0-9]*.jpg' | xargs rm
Tamlyn,

2
@Tamlyn Usare -print0e xargs -0, altrimenti il ​​comando fallirà con nomi di file contenenti spazi o virgolette singole. Ma -deletee -exec rm fare il lavoro su Windows. Se qualcosa non funziona, non è dovuto al loro uso.
Gilles 'SO- smetti di essere malvagio' il

Funzionerà anche con Windows?
CodyBugstein,

Funzionerà se hai una porta di utility Unix come Cygwin o GNUWin32. Ovviamente non funzionerà immediatamente su Windows. findAssicurati che Windows abbia un programma non correlato chiamato , quindi assicurati che le utility Unix siano le prime a entrare PATH.
Gilles 'SO- smetti di essere malvagio' il

0

Il comando giusto è:

find . -type f -iregex '.*[0-9]x[0-9]*\.jpg$'

questo prenderà solo i file con nomi: "aaa-12x12.jpg", ma non "aaa-12x12red.jpg"

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.