Найдите и удалите файлы, в именах которых содержится определенный текст в Linux
В этом руководстве объясняется, как найти и удалить файлы, содержащие определенный текст или строку в именах, с помощью команды find в Linux. Кроме того, мы также научимся находить и удалять файлы, которые "не" содержат в своих именах определенный текст.
Введение
У меня есть много PDF-файлов, в которых есть важные советы и рекомендации по Linux. Я дал этим файлам уникальное имя для облегчения идентификации.
Скажем, например, я сохранил файлы, содержащие сведения о конфигурации сервера LDAP, как ldapconfig.pdf, файл конфигурации FTP как ftpconfig.pdf, сведения о конфигурации DHCP-сервера как dhcp_config. .pdf и т. д.
Я преобразовал большинство из них в статьи и разместил их здесь, в нашем блоге, чтобы другие пользователи также могли извлечь из них пользу.
Проблема в том, что эти файлы занимают много места на диске. Поскольку у меня сотни файлов, я не хочу вручную находить и удалять их один за другим. Поиск и удаление всех файлов может занять несколько часов.
В поисках простого решения я понял, что в этом случае мне может помочь команда «найти». Просмотрев справочные страницы команды find, я нашел подходящее решение. Читай дальше.
1. Найдите и удалите файлы, в именах которых содержится определенный текст в Linux
Посмотрите на следующий пример. У меня есть следующие файлы в каталоге "Linux_guides".
cd Linux_guides/
$ ls
apache_config.pdf dhcp_config.pdf ldap_config.pdf php_install.pdf
apache_install.pdf ftp_config.pdf mysql_install.pdf
Я завершил часть установки, поэтому мне не нужны файлы, в именах которых содержатся слова "install".
Вместо того, чтобы искать и удалять файлы, содержащие фразу «установить», один за другим, мы можем удалить их все сразу, используя следующую команду:
find -type f -name '*install*' -delete
Приведенная выше команда удалит все файлы, в имени которых есть фраза «install», и сохранит все остальное.
Найдите и удалите файлы, в именах которых содержится определенный текст в Linux
Если опция удалить
недоступна, вы можете использовать любую из следующих команд:
find -type f -name '*install*' -exec rm {} \;
Или,
find -type f -name '*install*' -exec rm {} +
Вы можете спросить, мы можем сделать то же самое, используя команду "rm"
, как показано ниже:
rm *install*
Да, подойдет. Однако команда rm install
удалит все файлы, содержащие слово «install» в имени файла, из текущего каталога и выдаст сообщение, если какое-либо имя каталога содержит «install»
.
Но команда "find -type f"
будет рекурсивно искать только файлы в текущем каталоге и во всех подкаталогах.
1.1. Найдите файлы, в именах которых содержится определенный текст в Linux
Если вы хотите только найти файлы (а не удалить), просто удалите параметры -delete
или -exec rm {} \;
или -exec rm {} +
в приведенных выше командах.
Например, следующая команда найдет только те файлы, в именах которых содержится строка "install"
:
$ find -type f -name '*install*'
Пример вывода:
./mysql_install.pdf
./apache_install.pdf
./php_install.pdf
2. Найдите и удалите файлы, которые «не» содержат определенный текст в именах в Linux.
Вы знаете, как удалить файл, в имени которого содержится определенная фраза. Давайте теперь посмотрим, как найти и удалить файлы, в именах которых нет определенной фразы или строки.
Для этого просто добавьте параметр '-not'
в команду поиска, как показано ниже.
find -type f -not -name '*install*' -delete
Приведенная выше команда не удалит файлы, в имени которых есть фраза "install"
, а все остальное удалит.
Если опция удалить недоступна, вы можете использовать любую из следующих команд:
find -type f -not -name '*install*' -exec rm {} \;
Или,
find -type f -not -name '*install*' -exec rm {} +
Найдите и удалите файлы, которые не содержат определенного текста в именах в Linux
Более подробную информацию о команде find можно найти на страницах руководства.
man find
Заключение
Теперь вы знаете, как найти файл, в имени которого содержится определенное имя, и как удалить файл, в имени которого есть или нет определенное слово. Это будет полезно, если вы хотите удалить большое количество файлов одного типа в каталоге.