Удалить все файлы, имена файлов которых содержат определенную строку?


22

Я изменил мою тему WordPress. Старый создал столько изображений на сервере. Моя новая тема не нуждается в них, поэтому я хочу удалить все. Как я могу это сделать?

Например:
изображение по умолчанию:12_angry_men_lone_holdout.jpg

Я хочу удалить:

12_angry_men_lone_holdout-290x166.jpg
12_angry_men_lone_holdout-700x300.jpg 
12_angry_men_lone_holdout-50x50.jpg

Использование Digitalocean, Ubuntu 13.10.


на тип терминала, man rmчтобы увидеть страницу руководства команды rm.
hmayag


Похоже, эти изображения являются автоматически созданными миниатюрами изображений, загруженных в медиатеку WorldPress. Если так, то не удаляйте эти файлы в терминале на сервере. Откройте страницу администрирования WordPress, откройте «Настройки»> «Медиа». Установите желаемые размеры уменьшенного изображения там. Затем установите плагин Regenerate Thumbnails и заново создайте все миниатюры (это может занять несколько минут, в зависимости от количества изображений в вашей медиатеке).
Боб

Ответы:


22

Если они находятся в одной папке, используйте * подстановочный знак для достижения этого:

rm *text*

Где textнаходится строка в этом имени файла.


На самом деле это не один каталог, но я могу сделать это по одному сейчас. Спасибо!
Ибрагим Мумку

27

Используйте findдля рекурсивного поиска и удаления файлов с «текстом» в их именах:

find -type f -name '*text*' -delete

Возможно, вы также захотите запустить find -type f -name '*text*'(без -delete) перед этим, чтобы убедиться, что вы не удалите файлы, которые не собирались удалять.


На самом деле, вы можете размещать подстановочные знаки в любом месте строки поиска, поэтому -name '12_angry_men_lone_holdout-*.jpg'может быть более подходящим в вашем случае.


Разве это не нужно представлять путь к файлу
Avinash Raj

@AvinashRaj Если первый параметр не является путем, findвыполняется поиск в текущем рабочем каталоге.
n.st

Кто-нибудь положил. только после поиска для поиска внутри текущего рабочего каталога.
Авинаш Радж

1
@AvinashRaj Это было бы излишним. Согласно man find: Если пути не указаны, используется текущий каталог.
n.st

@AvinashRaj Оказывается, POSIX спецификации для findфактически это требует пути. По умолчанию .это модификация, добавленная GNU find. Если бы это были Unix и Linux , я бы добавил это к своему ответу, но, поскольку Ubuntu поставляется с GNU find по умолчанию, я бы не стал путать новичков больше, чем необходимо. ;)
n.st

1

Попробуй это:

rm -rf 12_angry_men_lone_holdout-*

Это будет keep 12_angry_men_lone_holdout.jpgи удалить файлы с размерами (290x166)

И, пожалуйста, помните,

rm -rf 12_angry_men_lone_holdout.*

также удалит файл по умолчанию, который вам нужен.


0
find . -type f -name '*[0-9]x[0-9]*' -delete

Запустите это в родительском каталоге. Это приведет к удалению всех файлов, которые имеют цифру, за которой следует символ «x», за которым следует другая цифра в имени.

Тем не менее, будьте осторожны, это также может привести к удалению оригинальных файлов, если их имя содержит вышеуказанный шаблон (маловероятно). Сначала запустите его без '-delete', чтобы увидеть, есть ли у вас файлы с таким именем. Если это так, вам просто нужно найти более ограничительный шаблон.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.