Форум русскоязычного сообщества Ubuntu


Автор Тема: Удаление файлов и директорий по ключевому слову.  (Прочитано 447 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн seralekseenko

  • Автор темы
  • Новичок
  • *
  • Сообщений: 19
    • Просмотр профиля
Здравствуйте.

Поскольку я считаю сбя новичком — пишу в этой ветке. Хочу разобраться в способах массового удаления файлов и папок.

Суть вопроса: какие есть способы удалить все файлы и директории по ключевому слову?

Например, для следующей структуры папок и файлов:

-/desktop
        -/first
               MyText.txt
               MyTestic.txt
               sound.mp3
              -/inFirst
                       someFile.testic
        -/second
               -/testic
                       testic.testic
                       other.txt
                      -/deepFolder
                                  someFile.pdf
               -/Testic
                       Testic.testic
я хочу удалить все, что содержит слово "testic". Не зависимо от того, что это: расширение файла, часть имени файла, часть имени директории. Регистр символов пока не трогаем.

Ожидаемый результат:

-/desktop
        -/first
               MyText.txt
               MyTestic.txt
               sound.mp3
              -/inFirst
        -/second
               -/Testic

Я нащупал два способа выполнения этой задачи:
  • Самым простым способом удалить всё, что содержит сочетание букв "testic" оказалась команда "rm":
    rm -rfv desktop/**/*testic*. (Для работы двойных звездочек (**) в bash  нужно ввести shopt -s globstar)
    Это пока единственная команда, которая сработала в соответствии с моими ожиданиями.
  • Еще есть команда "find" с опцией "-delite". Но она удаляет либо только файлы: find desktop/ -name "testic" -type f -delete, либо только папки: find desktop/ -name "testic" -type d -delete. Объединение команды в "-type f,d" выдает ошибку "directory is not empty". Если применять их по очереди — вроде все получается.

Про удаление по ключевому слову в любом регистре — я вообще пока не заикаюсь, но тоже интересно.

Какие еще есть команды массового удаления файлов и папок по заданным параметрам?
« Последнее редактирование: 05 Сентябрь 2020, 16:19:53 от seralekseenko »

Оффлайн ALiEN175

  • Модератор форума
  • Старожил
  • *
  • Сообщений: 4712
  • Capture the truth
    • Просмотр профиля
find desktop -name "*testic*" -exec rm -r {} \;
Пользователь добавил сообщение 05 Сентябрь 2020, 18:07:44:
Про удаление по ключевому слову в любом регистре
find -iname ...
« Последнее редактирование: 05 Сентябрь 2020, 18:07:44 от ALiEN175 »
ASUS P5K-C :: Intel Xeon E5450 :: 8 GB RAM :: Nvidia 8500GT :: XFCE
SAMSUNG N150 :: Intel Atom N450 :: 2 GB RAM :: Intel GMA3150 :: XFCE

Оффлайн seralekseenko

  • Автор темы
  • Новичок
  • *
  • Сообщений: 19
    • Просмотр профиля
ALiEN175, спасибо за ответ.

Если не сложно, не могли бы Вы детально описать выражение "{} \;"? И почему должна быть точка с запятой в конце?

Оффлайн ALiEN175

  • Модератор форума
  • Старожил
  • *
  • Сообщений: 4712
  • Capture the truth
    • Просмотр профиля
{} - подстановка того, что нашел find
\; - завершение конструкции exec. Можно использовать + (тогда exec выполнится единожды со всем найденным как аргументы для команды)

man find
« Последнее редактирование: 05 Сентябрь 2020, 21:21:42 от ALiEN175 »
ASUS P5K-C :: Intel Xeon E5450 :: 8 GB RAM :: Nvidia 8500GT :: XFCE
SAMSUNG N150 :: Intel Atom N450 :: 2 GB RAM :: Intel GMA3150 :: XFCE

Оффлайн user@localhost

  • Новичок
  • *
  • Сообщений: 3
    • Просмотр профиля
find desktop -name "*testic*" -exec rm -r {} \;

У find есть спец. ключ для удаления -
find /path/to/where -iname '*glob-pattern*' -delete

Оффлайн ALiEN175

  • Модератор форума
  • Старожил
  • *
  • Сообщений: 4712
  • Capture the truth
    • Просмотр профиля
user@localhost, есть конечно. Только вот не удаляет непустые директории.  :coolsmiley:

Пользователь добавил сообщение 09 Сентябрь 2020, 21:33:44:
Код: (txt) [Выделить]
$: mkdir 12345
$: touch 12345/file
$: find -iname 12345 -delete
find: не удалось удалить ‘./12345’: Каталог не пуст
$: rm 12345/file
$: find -iname 12345 -delete
$:
« Последнее редактирование: 09 Сентябрь 2020, 21:36:41 от ALiEN175 »
ASUS P5K-C :: Intel Xeon E5450 :: 8 GB RAM :: Nvidia 8500GT :: XFCE
SAMSUNG N150 :: Intel Atom N450 :: 2 GB RAM :: Intel GMA3150 :: XFCE

Оффлайн Azure

  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
ALiEN175, потому и надо сначала файлы удалитьfind -iregex '.*/12345\(\|/.*\)' -delete
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

 

Страница сгенерирована за 0.083 секунд. Запросов: 25.