usuń pliki pasujące do wzorca

32

Muszę rekurencyjnie usunąć wszystkie pliki ze wszystkich podkatalogów, w których nazwa pliku zawiera liczbę, po której następuje „x”, a następnie co najmniej dwa razy.

Przykład:

Chciałbym usunąć te pliki:

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

Ale NIE chcę usuwać tych plików:

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

Jak mogę to zrobić (z powłoki bash)

mikkelbreum
źródło

Odpowiedzi:

61

Łańcuch zawiera „liczbę, po której xnastępuje liczba” wtedy i tylko wtedy, gdy zawiera cyfrę, po której xnastępuje cyfra, tj. Jeśli zawiera podłańcuch pasujący do wzorca [0-9]x[0-9]. Więc chcesz usunąć pliki, których nazwa pasuje do wzorca *[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

Jeśli findnie masz -delete, zadzwoń, rmaby usunąć pliki.

find /path/to/directory -type f -name '*[0-9]x[0-9]*[0-9]x[0-9]*.jpg' -exec rm {} +
Gilles „SO- przestań być zły”
źródło
2
Dziękuję Ci! 12 000 plików zniknęło i 2 sekundy. Dzięki temu zaoszczędziłem trochę pracy fizycznej!
mikkelbreum
Ani -deletenie -exec rmdziałał dla mnie w Bash na Windows. Ale tak się find /path/to/directory -type f -name '*[0-9]x[0-9]*[0-9]x[0-9]*.jpg' | xargs rm
stało
2
@Tamlyn Użyj -print0i xargs -0, inaczej komenda nie powiedzie się z nazw plików zawierających spacje lub apostrofów. Ale -deletei -exec rm zrobić pracę na systemie Windows. Jeśli coś nie działa, to nie z powodu ich użycia.
Gilles „SO- przestań być zły”
Czy to zadziała również w systemie Windows?
CodyBugstein,
Będzie działać, jeśli masz port narzędzi uniksowych, takich jak Cygwin lub GNUWin32. Oczywiście to nie będzie działać po wyjęciu z pudełka w systemie Windows. Uważaj, aby Windows nie miał powiązanego programu o nazwie find, więc upewnij się, że narzędzia Unix są pierwsze PATH.
Gilles „SO - przestań być zły”,
0

Prawidłowe polecenie to:

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

spowoduje to pobranie tylko plików o nazwach: „aaa-12x12.jpg”, ale nie „aaa-12x12red.jpg”

MasterR
źródło