видалити файли, що відповідають шаблону


32

Мені потрібно рекурсивно видаляти всі файли з усіх підкаталогів, де ім'я файлу містить число, за яким "x" і число, принаймні два рази.

Приклад:

Я хочу видалити ці файли:

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

Але я НЕ хочу видаляти ці файли:

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

Як я можу це зробити (з оболонки bash)

Відповіді:


61

Рядок містить "число, за яким xслідує число", якщо і лише якщо воно містить цифру, за якою xслідує цифра, тобто якщо вона містить підрядку, що відповідає шаблону [0-9]x[0-9]. Отже, ви хочете видалити файли, ім'я яких відповідає шаблону *[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

Якщо у вас findнемає -delete, зателефонуйте, rmщоб видалити файли.

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

2
Дякую! 12 000 файлів за 2 сек. Це врятувало мені ручну працю!
mikkelbreum

Ні, -deleteні -exec rmпрацювали для мене в Bash на Windows. Але це було так:find /path/to/directory -type f -name '*[0-9]x[0-9]*[0-9]x[0-9]*.jpg' | xargs rm
Тамлін

2
@Tamlyn використання -print0і xargs -0, в іншому випадку команда не виконається імен файлів , що містять пробіли одиничні лапки. Але -deleteі -exec rm зробити роботу на Windows. Якщо щось не працює, це не пов’язано з їх використанням.
Жил "ТАК - перестань бути злим"

Чи буде це працювати і з Windows?
CodyBugstein

Він працюватиме, якщо у вас є порт утиліт Unix, таких як Cygwin або GNUWin32. Очевидно, це не вийде з вікна в Windows. Слідкуйте за тим, щоб у Windows була пов'язана непов’язана програма find, тому переконайтеся, що спочатку утиліти Unix PATH.
Жил "ТАК - перестань бути злим"

0

Правильна команда:

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

це захопить лише файли з іменами: 'aaa-12x12.jpg', але не 'aaa-12x12red.jpg'

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.