Удалить все изображения в папке, кроме изображений с определенной строкой в ​​заголовке?

332
Carl Bembridge

У меня есть около 50 000 изображений в папке (я использую Mac OSX), и я хотел бы удалить все из них, если в них нет x300 или 300x . Я надеялся, что это возможно, используя терминал или автомат, но понятия не имею, как это сделать!

Спасибо!

0

1 ответ на вопрос

0
Sami Laine

С терминалом есть много способов сделать это. Одним из вариантов является использование find (1):

find /your/dir -type f \! -name 'x300' \! -name '300x' -exec echo rm -f {} \; 

Замените /your/dirна место, где лежат ваши файлы. Как только вы абсолютно уверены, что команда find касается только тех файлов, которые вы действительно хотите удалить с помощью rm, удалите «echo» из exec-part и повторите, чтобы фактически удалить файлы, вместо того, чтобы распечатывать, какие файлы будут удалены.

Некоторые объяснения:
find / your / dir находит все файлы и папки в / your / diir и ниже.
-type f фильтрует только файлы.
-name x300фильтрует только вещи, содержащие x300 в имени файла.
! полностью изменяет это (таким образом только файлы, НЕ содержащие).

-exec выполняет команду. Вы можете выполнить эхо, или вы могли бы -printих.
Вы можете использовать rm в качестве команды для удаления или -deleteиспользовать здание поиска.

{}текущее имя файла Если вы используете, \;то {} будет заменено одним именем файла за раз. (поэтому, если у вас есть 10000 файлов для удаления, он запустит новый 10000 раз).

Вы также можете заменить это на, +чтобы получить много файлов за один раз (хотя -delete еще более эффективен).

Привет! Большое спасибо за ваш ответ, я пытался заставить его работать (и выяснить это для себя!), Но он ведет себя не так, как я думаю ... я использую команду ** find / Пользователи / Carl / Рабочий стол / LTW -типа f \! имя "x300" \! -name '300x' -exec echo rm -f {} \; ** но это возвращает все файлы из того, что я вижу, например, терминал повторил ** rm -f / Users / Carl / Desktop / LTW / zz-top-texicali-ep-review-300x225.jpg **, который следует исключить из-за ** 300x225 ** права? Можете ли вы определить, где я тупой? Заранее спасибо! Carl Bembridge 8 лет назад 0