Найти и удалить файлы Linux

Обновлено: 21.11.2024

В этом руководстве объясняется, как найти и удалить файлы, содержащие определенный текст или строку в имени, с помощью команды find в Linux. Кроме того, мы также узнаем, как находить и удалять файлы, имена которых «не содержат» определенного текста.

Введение

У меня есть много PDF-файлов с важными советами и рекомендациями по работе с Linux. Я дал этим файлам уникальные имена файлов для облегчения идентификации.

Например, я сохранил файлы, содержащие сведения о конфигурации сервера LDAP, как ldapconfig.pdf, файл конфигурации FTP как ftpconfig.pdf, сведения о конфигурации сервера DHCP, как dhcp_config.pdf и т. д.

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

Проблема в том, что эти файлы занимают много места на диске. Поскольку у меня сотни файлов, я не хочу вручную находить и удалять их один за другим. Поиск и удаление всех файлов может занять несколько часов.

В поисках простого решения я понял, что в этом случае мне может помочь команда "найти". Просмотрев справочные страницы команды find, я нашел подходящее решение. Читайте дальше.

1. Поиск и удаление файлов, содержащих определенный текст в именах в Linux

Посмотрите на следующий пример. У меня есть следующие файлы в каталоге с именем «Linux_guides».

Я завершил установочную часть, поэтому мне не нужны файлы, в названиях которых есть слово "установить".

Вместо того, чтобы находить и удалять файлы, содержащие фразу «установить», один за другим, мы можем удалить их все сразу, используя следующую команду:

Приведенная выше команда удалит все файлы, в имени которых есть фраза "установить", и сохранит все остальное.

Поиск и удаление файлов, имена которых содержат определенный текст в Linux

Если опция удаления недоступна, вы можете использовать любую из следующих команд:

Вы можете спросить, можем ли мы сделать то же самое с помощью команды "rm", как показано ниже:

Да, подойдет. Однако команда rm install удалит все файлы, содержащие «установить» в имени файла из текущего каталога, и выдаст сообщение, если какое-либо имя каталога содержит «установить».

Но команда "find -type f" будет рекурсивно искать файлы только в текущем каталоге и во всех подкаталогах.

1.1. Поиск файлов, имена которых содержат определенный текст в Linux

Если вы хотите только найти файлы (не удалять), просто удалите опции -delete или -exec rm <> \; или -exec rm <> + в приведенных выше командах.

Например, следующая команда найдет только те файлы, имена которых содержат строку "install":

Пример вывода:

2. Поиск и удаление файлов, имена которых «не содержат» определенного текста в Linux

Вы знаете, как удалить файл, в названии которого содержится определенная фраза. Давайте теперь посмотрим, как найти и удалить файлы, в именах которых нет определенной фразы или строки.

Для этого просто добавьте параметр "-not" в команду поиска, как показано ниже.

Вышеупомянутая команда не удалит файлы, в имени которых есть фраза "установить", и удалит все остальное.

Если опция удаления недоступна, вы можете использовать любую из следующих команд:

Поиск и удаление файлов, имена которых не содержат определенного текста в Linux

Для получения дополнительной информации о команде find см. справочные страницы.

Заключение

Теперь вы знаете, как найти файл, в имени которого содержится определенное имя, и как удалить файл, в имени которого есть или не содержится определенное слово. Это будет полезно, если вы хотите удалить большое количество файлов одного типа в каталоге.

Автор Rahul, 5 августа 2013 г. Чтение: 3 минуты Обновлено: 7 апреля 2021 г.

Рекомендуется удалять с сервера старые неиспользуемые файлы. Например, если мы выполняем ежедневное/ежечасное резервное копирование файлов или базы данных на сервере, то на сервере будет создаваться много мусора. Так что чистите его регулярно. Для этого вы можете найти старые файлы в каталоге резервных копий и очистить их.

В этой статье рассказывается, как найти и удалить файлы старше 30 дней. Здесь 30 дней старше означает, что дата последнего изменения предшествует 30 дням.

1.Удалить файлы старше 30 дней

Вы можете использовать команду find для поиска всех файлов, измененных старше X дней. А также удалить их, если требуется, в одной команде.

Во-первых, перечислите все файлы старше 30 дней в каталоге /opt/backup.

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

2. Удалить файлы с определенным расширением

Вместо удаления всех файлов вы также можете добавить дополнительные фильтры для команды поиска. Например, вам нужно удалить только файлы с расширением «.log» и измененные до 30 дней.

В целях безопасности сначала выполните пробный запуск и перечислите файлы, соответствующие критериям.

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

Приведенная выше команда удалит только файлы с расширением .log и датой последнего изменения старше 30 дней.

3. Рекурсивно удалить старый каталог

Использование параметра -delete может завершиться ошибкой, если каталог не пуст. В этом случае мы будем использовать команду Linux rm с командой find.

Приведенная ниже команда будет искать все каталоги, измененные до 90 дней, в каталоге /var/log.

Здесь мы можем выполнить команду rm, используя параметр командной строки -exec. Выходные данные команды Find будут отправлены в команду rm в качестве входных данных.

ВНИМАНИЕ: Перед удалением каталога убедитесь, что не удаляется полезный каталог. Иногда дата изменения родительского каталога может быть старше, чем у дочерних каталогов. В этом случае рекурсивное удаление также может удалить дочерний каталог.

Заключение

В этом руководстве вы научились искать и удалять файлы, измененные старше определенных дней, в командной строке Linux.

Invicti Web Application Security Scanner — единственное решение, обеспечивающее автоматическую проверку уязвимостей с помощью Proof-Based Scanning™.

Наша аудитория поддерживает Geekflare. Мы можем получать партнерские комиссионные за покупку ссылок на этом сайте.

Обеспечьте безопасность приложений правильно! Обнаружение, защита, мониторинг, ускорение и многое другое…

Одной из основных задач администрирования файловой системы является создание, изменение и удаление различных типов файлов и каталогов. Знание некоторых основных инструментов и концепций удаления файлов может пригодиться и сэкономить ваше время.

Linux предлагает несколько инструментов, которые могут помочь нам в выполнении задач по удалению файлов. Часто нам нужно удалить не один, а кучу файлов и каталогов, исходя из каких-то критериев. Полезно знать несколько распространенных команд и их комбинаций, чтобы легко выполнить нашу задачу.

  • Осторожно используйте приведенные ниже команды, особенно те, которые используют регулярные выражения или некоторые шаблоны поиска с помощью команды find. Неправильное выражение или шаблон могут привести к удалению важных данных/системных файлов или просто ненужных файлов.
  • Всегда сохраняйте последнюю резервную копию важных данных и системных файлов.
  • Будьте осторожны, прежде чем запускать такие команды, особенно если вы запускаете их с помощью Sudo или суперпользователя (root).

Удалить с помощью отмены связи

Не так популярен. Чтобы навсегда удалить один файл, мы можем использовать команду unlink.

Удалить один файл

Существует более часто используемая команда для удаления файлов, например команда rm, которая поддерживает одновременное удаление одного или нескольких файлов.

rm предлагает вам подтвердить удаление файлов, защищенных от записи, в противном случае он переходит к непосредственному удалению файла. Чтобы rm всегда спрашивал перед удалением файла, используйте флаг -i:

Команда

rm удаляет без отображения каких-либо сообщений на экране. Чтобы узнать, что на самом деле делает команда rm, используйте rm с флагом -v.

Чтобы удалить защищенные от записи файлы без запроса подтверждения, используйте флаг -f.

Удалить несколько файлов

Можно удалить несколько файлов, указав несколько имен файлов для rm в качестве аргументов.

rm также поддерживает регулярные выражения. Если вы хотите удалить все файлы с именем file-name-* , вы можете использовать:

Мы также можем указать несколько файлов с помощью регулярных выражений. Если мы хотим удалить три файла, которые соответствуют имени файла-1, имени файла-2 и имени файла-3, мы можем использовать что-то вроде:

Удалить каталог

Пустой каталог можно удалить с помощью команды rm с параметром -d.

Параметры, поддерживаемые для удаления файлов, также можно комбинировать с удалением каталогов с помощью флага -d. Например:

Чтобы удалить непустой каталог, используйте флаг -r.

Если вам не нужны запросы перед удалением каталога и его содержимого, используйте флаг -rf. Это удалит все внутри каталога, включая сам каталог, без какого-либо подтверждения. Будьте осторожны при использовании, особенно в качестве root.

Найти и удалить файлы

Для более сложных требований мы можем использовать команду find с различными параметрами. Чтобы удалить все файлы, соответствующие шаблону, внутри пути, заданного

Если мы хотим удалить все, что соответствует шаблону, включая каталоги внутри , мы можем немного изменить приведенную выше команду следующим образом:

Современные версии команды find поддерживают внутреннюю функцию удаления. Здесь флаг -delete заменяет команду rm, а -depth указывает команде find сначала обработать содержимое каталога перед самим каталогом:

Приведенный выше пример более эффективен при работе с большим количеством файлов, поскольку он не создает новый внешний процесс для команды rm для каждого совпавшего файла. Но не все версии команды find (пока) могут поддерживать флаг -delete. В качестве альтернативы у нас есть возможность использовать команду xargs с поиском, как показано в следующем примере ниже:

Или используйте команду exec + терминатор, чтобы связать воедино все, что было найдено командой find, например xargs:

По умолчанию команда find использует флаг -print, который мы обычно не записываем. С xargs нам нужно избегать символа новой строки между именами файлов. Таким образом, флаг -print0 указывает find печатать нулевой символ после каждого найденного имени файла.

Аналогично мы указываем флаг -0 с xargs, чтобы обе команды совпадали. Здесь команда rm удаляет файл, переданный по каналу поиска. Например, приведенная ниже команда будет искать и удалять все файлы *.tmp из домашнего каталога текущего пользователя (обозначается символом ~).

Команда find предлагает несколько способов поиска файлов и каталогов, включая право собственности, разрешение, отметку времени и т. д. Мы рассмотрим несколько таких способов, которые могут помочь нам в определенных задачах удаления файлов.

Найти и удалить файлы пользователем

Чтобы удалить все содержимое данного каталога, принадлежащее определенному пользователю, используйте:

В приведенном выше примере флаг -mindepth со значением 1 предотвращает удаление каталога, заданного параметром , если он соответствует шаблону и критериям поиска. Или, чтобы удалить все внутри данного каталога, принадлежащего определенной группе, используйте:

Если вы не хотите просматривать подкаталоги в пути поиска, у вас также есть возможность использовать -maxdepth с соответствующим значением глубины каталога.

Вот пример выполнения:

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

Найти и удалить пустые каталоги

Чтобы удалить все пустые каталоги внутри заданного пути, вы можете использовать:

Вместо этого, чтобы удалить все пустые файлы по указанному пути, используйте:

Найти и удалить файлы старше X

Иногда может потребоваться удалить файлы старше x дней. find имеет параметры для чтения времени создания файла (ctime), доступа (atime) и модификации (mtime). Мы можем использовать параметр mtime с функцией поиска, чтобы найти и удалить файлы, измененные более x дней назад.

Например, чтобы удалить все файлы с расширением log внутри /var/tmp со временем модификации 30 дней назад или более, мы можем использовать:

Найти и удалить файлы по разрешению

Теперь мы также можем удалять файлы на основе определенных разрешений, например:

Или, если мы хотим использовать символическую форму для разрешения, используйте:

Подведение итогов

Linux предлагает простые команды unlink , rm и rmdir, которые можно легко расширить с помощью регулярных выражений. Для более сложных потребностей у вас есть возможность использовать комбинацию таких инструментов, как find и xargs, чтобы добиться того, что вам нужно. Помимо примеров в этой статье, у вас есть возможность использовать поиск с любым из доступных флагов для настройки поиска. Обратитесь к справочным страницам для соответствующих команд, чтобы узнать о них больше.

Всегда запускайте команды find без флага rm или -delete и анализируйте их вывод, чтобы узнать, какие файлы или каталоги будут затронуты выполнением фактической команды. Правильная конфигурация и политика резервного копирования помогают не только в случае случайного удаления, но и в случае сбоя оборудования и кибератак.

Дэйв Маккей

Дэйв Маккей
Писатель

Команды rm и rmdir удаляют файлы и каталоги в Linux, macOS и других Unix-подобных операционных системах. Они аналогичны командам del и deltree в Windows и DOS. Эти команды очень мощные и имеют довольно много параметров.

Важно отметить, что файлы и каталоги, удаленные с помощью rm и rmdir, не перемещаются в корзину. Они немедленно удаляются с вашего компьютера. Если вы случайно удалите файлы с помощью этих команд, восстановить их можно будет только из резервной копии.

Как удалить файлы с помощью rm

Самый простой случай — удаление одного файла в текущем каталоге.Введите команду rm, пробел и имя файла, который вы хотите удалить.

Если файл находится не в текущем рабочем каталоге, укажите путь к местоположению файла.

Вы можете передать более одного имени файла в rm . При этом будут удалены все указанные файлы.

Подстановочные знаки можно использовать для выбора групп файлов, которые необходимо удалить. * представляет собой несколько символов, а ? представляет один символ. Эта команда удалит все файлы изображений png в текущем рабочем каталоге.

Эта команда удалит все файлы с односимвольным расширением. Например, это удалит File.1 и File.2, но не File.12.

Если файл защищен от записи, вы получите запрос перед удалением файла. Вы должны ответить y или n и нажать «Ввод».

Чтобы снизить риск использования rm с подстановочными знаками, используйте параметр -i (интерактивный). Это требует подтверждения удаления каждого файла.

Параметр -f (принудительно) противоположен интерактивному. Подтверждение не запрашивается, даже если файлы защищены от записи.

Как удалить каталоги с помощью rm

Чтобы удалить пустой каталог, используйте параметр -d (каталог). Вы можете использовать подстановочные знаки ( * и ? ) в именах каталогов так же, как и в именах файлов.

Указание более одного имени каталога приводит к удалению всех указанных пустых каталогов.

Чтобы удалить каталоги, которые не пусты, используйте параметр -r (рекурсивный). Чтобы было ясно, это удаляет каталоги и все файлы и подкаталоги, содержащиеся в них.

Если каталог или файл защищены от записи, вам будет предложено подтвердить удаление. Чтобы удалить каталоги, которые не пусты, и подавить эти подсказки, используйте вместе параметры -r (рекурсивный) и -f (принудительный).

Здесь требуется осторожность. Ошибка с командой rm -rf может привести к потере данных или сбою системы. Это опасно, и осторожность — лучшая политика. Чтобы получить представление о структуре каталогов и файлах, которые будут удалены командой rm -rf, используйте команду дерева.

Используйте apt-get для установки этого пакета в вашу систему, если вы используете Ubuntu или другой дистрибутив на основе Debian. В других дистрибутивах Linux вместо этого используйте инструмент управления пакетами вашего дистрибутива Linux.

Выполнение команды дерева создает простую для понимания диаграмму структуры каталогов и файлов в каталоге, из которого она запущена.

Вы также можете указать путь к команде дерева, чтобы она запускала дерево из другого каталога в файловой системе.

У команды rm также есть параметры --one-file-system, --no-preserve-root, --preserve-root, но они рекомендуются только опытным пользователям. Если вы что-то сделаете не так, вы можете случайно удалить все системные файлы. Обратитесь к странице руководства команды для получения дополнительной информации.

Как удалить каталоги с помощью rmdir

Есть еще одна команда, называемая rmdir , которую вы можете использовать для удаления каталогов. Разница между rm и rmdir заключается в том, что rmdir может удалять только пустые каталоги. Он никогда не удалит файлы.

Простейшим случаем является удаление одного пустого каталога. Как и в случае с rm , вы можете передать несколько имен каталогов в rmdir или путь к каталогу.

Удалить один каталог в текущем каталоге, передав его имя в rmdir :

Удалить несколько каталогов, передав список имен в rmdir :

Удалить каталог, не входящий в текущий каталог, указав полный путь к этому каталогу:

Если вы попытаетесь удалить непустую папку, rmdir выдаст вам сообщение об ошибке. В следующем примере rmdir успешно и без вывода сообщений удаляет каталог клиентов, но отказывается удалять каталог проектов, поскольку он содержит файлы. Каталог проектов остался таким же, как и был, и файлы в нем остались нетронутыми.

Когда rmdir выдает ошибку «Каталог не пуст», он прекращает обработку каталогов, которые были переданы ему в командной строке.Если вы попросили его удалить четыре каталога, а в первом были файлы, rmdir выдаст вам сообщение об ошибке и больше ничего не сделает. Вы можете заставить его игнорировать эти ошибки с помощью параметра --ignore-fail-on-non-empty, чтобы обрабатывались другие каталоги.

В следующем примере в rmdir были переданы две папки: work/reports и work/quotes. В команду включен параметр --ignore-fail-on-non-empty. В папке work/reports есть файлы, поэтому rmdir не может их удалить. Опция --ignore-fail-on-non-empty заставляет rmdir игнорировать ошибку и переходить к следующей папке, которую необходимо обработать, это work/quotes . Это пустая папка, и rmdir ее удаляет.

Это была использованная команда.

Вы можете использовать параметр -p (parents) для удаления каталога, а также для удаления его родительских каталогов. Этот трюк работает, потому что rmdir начинается с целевого каталога, а затем возвращается к родительскому. Теперь этот каталог должен быть пуст, чтобы его можно было удалить с помощью rmdir , и процесс повторяется, возвращаясь к пути, указанному для rmdir .

В следующем примере в rmdir передается команда:

И счета-фактуры, и рабочие каталоги удаляются в соответствии с запросом.

Используете ли вы Bash или любую другую оболочку, Linux предоставляет гибкие и мощные команды для удаления каталогов и файлов прямо из командной строки терминала. Некоторые люди предпочитают, чтобы рабочий процесс вращался вокруг терминала. У других может не быть выбора в этом вопросе. Они могут работать на серверах без установленного графического интерфейса или в удаленном сеансе безголовой системы, такой как Raspberry Pi. Эти команды идеально подходят для этой группы людей.

Но какой бы рабочий процесс вы ни предпочли, эти команды очень хорошо подходят для включения в сценарии оболочки. Если сценарий запускается заданием cron, он может помочь автоматизировать рутинные задачи по обслуживанию, такие как очистка ненужных файлов журнала. Если вы исследуете этот вариант использования, помните о силе этих команд, тщательно проверяйте все и всегда сохраняйте последнюю резервную копию.

< /tbody>
Команды Linux
Файлы tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look · strings · type · rename · zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm
Процессы alias · screen · top · nice · renice · прогресс · strace · systemd · tmux · chsh · история · at · пакетное · бесплатное · которое · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · timeout · стена · yes · kill · спать · sudo · su · время · groupadd · usermod · группы · lshw · выключение · перезагрузка · halt · poweroff · passwd · lscpu · crontab · date · bg · fg
Сеть netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · копать · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw
  • › Как использовать BleachBit в Linux
  • › Как восстановить удаленные файлы в Linux с помощью testdisk
  • › Как использовать команду «да» на Mac
  • › Как безопасно удалить файлы в Linux
  • › Почему не было Windows 9?
  • ›5 шрифтов, которые следует прекратить использовать (и лучшие альтернативы)
  • › Как установить Google Play Маркет в Windows 11
  • › Почему прозрачные чехлы для телефонов желтеют?

Читайте также: