Удаление всех файлов, содержащих строку на их имя

Есть ли инструмент командной строки, который удаляет все это whereis возвраты (даже если они - каталоги), но работы даже с частичными именами (например, если я даю строку gmai это также удалит файлы, которые называют gmail).

Так рекурсивно просмотрите все каталоги и удалите содержание тех, которые содержат строку на их имя.

например, Если каталоги mail/gmail/sentmail удалите все ниже gmail.

0
задан 21 February 2018 в 23:50

2 ответа

Если Вы действительно хотите сделать это, можно использовать эту команду , но необходимо протестировать прежде без переключателя -delete чтобы протестировать, если это - то, что является Вами, ожидайте:

find ./mail -depth -path '*gmai*' -delete

Это рекурсивно во всех поддиректорах

С помощью комментария от @David Foerster и моей исходной команды

5
ответ дан 30 October 2019 в 23:44

whereis(1) не звучит подходящим для Вашей цели, так как это не средство поиска пути общего назначения.

Без поискового индекса

Как Gilles отметил в своем ответе, который можно использовать find(1) для этого задания, но я хочу сделать маленький все же значительный improvement1:

find [PATH...] -depth -path '*gmai*' -print # -delete

Объяснение:

  • find [PATH...] проходит все файлы и подкаталоги ниже каждого PATH или текущие рабочие каталоги, если никакой путь не был дан и печатает все соответствия (по умолчанию).

  • -path PATTERN полные пути соответствий против PATTERN использование globbing если таковые имеются, таким образом, *gmai* соответствия все пути с инфиксом gmai.

  • -delete удаляет все подобранные пути (и переопределяет действие по умолчанию для печати их).

  • -depth сообщает find соответствовать детям перед родителями, т.е. записями каталога перед самими родительскими каталогами. Необходимо удалить дочерние элементы перед их родителями, потому что в Unix' семантика файловой системы только пустые каталоги могут быть удалены.

  • -print печать все подобранные пути. Используйте это для проверки результата перед фактическим удалением. Комментарий в -delete команда (путем удаления # перед ним) для фактического удаления их.

С поисковым индексом

Если все местоположения, которые Вы намереваетесь удалить, появляются в mlocate.db(5) ищите индекс, можно использовать его для более быстрых поисков:

locate '/your/parent/path/*gmai*'

поиски все (индексируемые) пути, которые запускаются с /your/parent/path/ и имейте инфикс gmai в их остатке. Эта команда только перечисляет результаты поиска.

Удалить использование результатов:

locate -0 '/your/parent/path/*gmai*' | xargs -r -0 -- rm -rf --

Объяснение:

  • | перенаправляет вывод команды левой стороны к входу команды правой стороны.

  • xargs собирает "объекты" из его входа, добавляет их к данной команде и выполнениям та команда.

  • -r делает xargs не выполняет команду, если никакой входной параметр не происходит.

  • rm -rf удаляет файлы и каталоги рекурсивно

  • -0 говорит locate разграничить соответствия пустыми байтами и xargs принять разделенные от пустого указателя входные параметры. Это избегает проблем с путями, которые содержат пробел и, более конкретно, символы разрыва строки.


1, что он соединился в свой ответ, прежде чем вопрос был вновь открыт и разрешен меня для ответа.

2
ответ дан 30 October 2019 в 23:44

Другие вопросы по тегам:

Похожие вопросы: