Есть ли инструмент командной строки, который удаляет все это whereis
возвраты (даже если они - каталоги), но работы даже с частичными именами (например, если я даю строку gmai
это также удалит файлы, которые называют gmail
).
Так рекурсивно просмотрите все каталоги и удалите содержание тех, которые содержат строку на их имя.
например, Если каталоги mail/gmail/sentmail
удалите все ниже gmail
.
Если Вы действительно хотите сделать это, можно использовать эту команду находки, но необходимо протестировать прежде без переключателя -delete
чтобы протестировать, если это - то, что является Вами, ожидайте:
find ./mail -depth -path '*gmai*' -delete
Это рекурсивно во всех поддиректорах
С помощью комментария от @David Foerster и моей исходной команды
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, что он соединился в свой ответ, прежде чем вопрос был вновь открыт и разрешен меня для ответа.