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

Обновлено: 01.07.2024

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

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

В этом руководстве вы узнаете, как находить и удалять повторяющиеся файлы в Linux с помощью инструментов командной строки rdfind и fdupes, а также с помощью инструментов с графическим интерфейсом под названием DupeGuru и FSlint.

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

1. Rdfind - находит повторяющиеся файлы в Linux

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

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

  • Если A был найден при сканировании входного аргумента раньше, чем B, A имеет более высокий рейтинг.
  • Если A был обнаружен на глубине ниже B, A имеет более высокий рейтинг.
  • Если A был найден раньше, чем B, A имеет более высокий рейтинг.

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

Чтобы установить rdfind в Linux, используйте следующую команду для вашего дистрибутива Linux.

Чтобы запустить rdfind в каталоге, просто введите rdfind и целевой каталог. Вот пример:


Как видите, rdfind сохранит результаты в файле с именем results.txt, расположенном в том же каталоге, в котором вы запустили программу. Файл содержит все дубликаты файлов, найденные rdfind. Вы можете просмотреть файл и удалить дубликаты файлов вручную, если хотите.

Еще вы можете использовать параметр -dryrun , который предоставит список дубликатов без каких-либо действий:

Когда вы найдете дубликаты, вы можете заменить их жесткими ссылками.

И если вы хотите удалить дубликаты, вы можете запустить.

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

2. Fdupes - сканирование дубликатов файлов в Linux

Fdupes - еще одна программа, которая позволяет выявлять повторяющиеся файлы в вашей системе. Он бесплатный, имеет открытый исходный код и написан на C. Он использует следующие методы для определения повторяющихся файлов:

  • Сравнение частичных подписей md5sum
  • Сравнение полных подписей md5sum
  • побайтовое сравнение проверки

Как и у rdfind, у него есть похожие параметры:

  • Рекурсивный поиск
  • Исключить пустые файлы
  • Показывает размер повторяющихся файлов.
  • Немедленно удалите дубликаты.
  • Исключить файлы с другим владельцем

Чтобы установить fdupes в Linux, используйте следующую команду для вашего дистрибутива Linux.

Синтаксис Fdupes похож на rdfind. Просто введите команду, а затем каталог, который вы хотите просканировать.

Для рекурсивного поиска файлов вам необходимо указать -r такую u200bu200bопцию.

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

Чтобы fdupes рассчитал размер повторяющихся файлов, используйте параметр -S .

Для сбора сводной информации о найденных файлах используйте параметр -m .


Наконец, если вы хотите удалить все дубликаты, используйте -d такую u200bu200bопцию.

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


Решение, которое определенно не рекомендуется, - использовать параметр -N , который приведет к сохранению только первого файла.

Чтобы получить список доступных опций для использования с fdupes, просмотрите страницу справки, запустив.

3. dupeGuru - поиск дубликатов файлов в Linux

dupeGuru - это кроссплатформенный инструмент с открытым исходным кодом, который можно использовать для поиска дубликатов файлов в системе Linux. Инструмент может сканировать имена файлов или содержимое в одной или нескольких папках. Это также позволяет вам найти имя файла, похожее на файлы, которые вы ищете.

dupeGuru поставляется в разных версиях для платформ Windows, Mac и Linux. Его функция быстрого алгоритма нечеткого сопоставления поможет вам найти повторяющиеся файлы в течение минуты. Он настраивается, вы можете извлекать точные дубликаты файлов, которые хотите, и удалять ненужные файлы из системы.

Чтобы установить dupeGuru в Linux, используйте следующую команду для вашего дистрибутива Linux.


4. FSlint - Поиск дубликатов файлов для Linux

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

Чтобы установить FSlint в Linux, используйте следующую команду для вашего дистрибутива Linux.


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

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


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

Команда find – это невероятно мощный инструмент, позволяющий искать файлы не только по названию, но и по:

  • Дате добавления.
  • Содержимому.
  • Регулярным выражениям.

Данная команда будет очень полезна системным администраторам для:

  • Управления дисковым пространством.
  • Бэкапа.
  • Различных операций с файлами.

Команда find в Linux производит поиск файлов и папок на основе заданных вами критериев и позволяет выполнять действия с результатами поиска.

Синтаксис команды find:

  • directory-to-search (каталог поиска) – это отправной каталог, с которой find начинает поиск файлов по всем подкаталогам, которые находятся внутри. Если не указать путь, тогда поиск начнется в текущем каталоге;
  • criteria (критерий) – критерий, по которым нужно искать файлы;
  • action (действие) – что делать с каждым найденным файлом, соответствующим критериям.

Поиск по имени

Следующая команда ищет файл s.txt в текущем каталоге:

  • . (точка) – файл относится к нынешнему каталогу
  • -name – критерии по которым осуществляется поиск. В данном случае поиск по названию файла.

В данном случае критерий -name учитывает только символы нижнего регистра и файл S.txt не появиться в результатах поиска. Чтобы убрать чувствительность к регистру необходимо использовать –iname.

Для поиска всех изображений c расширением .jpg нужно использовать шаблон подстановки *.jpg:

Можно использовать название каталога для поиска. Например, чтобы с помощью команды find найти все png изображения в каталоге home:

Поиск по типу файла

Критерий -type позволяет искать файлы по типу, которые бывают следующих видов:

  • f – простые файлы;
  • d – каталоги;
  • l – символические ссылки;
  • b – блочные устройства (dev);
  • c – символьные устройства (dev);
  • p – именованные каналы;
  • s – сокеты;

Например, указав критерий -type d будут перечислены только каталоги:

Поиск по размеру файла

Допустим, что вам необходимо найти все большие файлы. Для таких ситуаций подойдет критерий -size.

  • "+" — Поиск файлов больше заданного размера
  • "-" — Поиск файлов меньше заданного размера
  • Отсутствие знака означает, что размер файлов в поиске должен полностью совпадать.

В данном случае поиск выведет все файлы более 1 Гб (+1G).

Единицы измерения файлов:

Поиск пустых файлов и каталогов

Критерий -empty позволяет найти пустые файлы и каталоги.

Поиск времени изменения

Критерий -cmin позволяет искать файлы и каталоги по времени изменения. Для поиска всех файлов, измененных за последний час (менее 60 мин), нужно использовать -60:

Таким образом можно найти все файлы в текущем каталоге, которые были созданы или изменены в течение часа (менее 60 минут).

Для поиска файлов, которые наоборот были изменены в любое время кроме последнего часа необходимо использовать +60.

Поиск по времени доступа

Критерий -atime позволяет искать файлы по времени последнего доступа.

Таким образом можно найти файлы, к которым не обращались последние полгода (180 дней).

Поиск по имени пользователя

Опция –user username дает возможность поиска всех файлов и каталогов, принадлежащих конкретному пользователю:

Таким образом можно найти все файлы пользователя tisha в каталоге home, а 2>/dev/null сделает выдачу чистой без ошибок в отказе доступа.

Поиск по набору разрешений

Критерий -perm – ищет файлы по определенному набору разрешений.

Поиск файлов с разрешениями 777.

Операторы

Для объединения нескольких критериев в одну команду поиска можно применять операторы:

Например, чтобы найти файлы размером более 1 Гбайта пользователя tisha необходимо ввести следующую команду:

Если файлы могут принадлежать не только пользователю tisha, но и пользователю pokeristo, а также быть размером более 1 Гбайта.

Перед скобками нужно поставить обратный слеш "\".

Действия

К команде find можно добавить действия, которые будут произведены с результатами поиска.

  • -delete — Удаляет соответствующие результатам поиска файлы
  • -ls — Вывод более подробных результатов поиска с:
    • Размерами файлов.
    • Количеством inode.

    -delete

    Полезен, когда необходимо найти и удалить все пустые файлы, например:

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

    Данное действие является особенным и позволяет выполнить команду по вашему усмотрению в результатах поиска.

    • command – это команда, которую вы желаете выполнить для результатов поиска. Например:
      • rm
      • mv
      • cp

      С помощью –exec можно написать альтернативу команде –delete и применить ее к результатам поиска:

      Другой пример использования действия -exec:

      Таким образом можно скопировать все .jpg изображения в каталог backups/fotos

      Заключение

      Команду find можно использовать для поиска:

      • Файлов по имени.
      • Дате последнего доступа.
      • Дате последнего изменения.
      • Имени пользователя (владельца файла).
      • Имени группы.
      • Размеру.
      • Разрешению.
      • Другим критериям.

      С полученными результатами можно сразу выполнять различные действия, такие как:

      • Удаление.
      • Копирование.
      • Перемещение в другой каталог.

      Команда find может сильно облегчить жизнь системному администратору, а лучший способ овладеть ей – больше практиковаться.


      Как найти и удалить файлы старше конкретной даты в Linux

      1. Посмотрим список всех файлов в папке с датой изменения, для этого стоит выполнить команду:

      пример использование команды ls -lah для вывода подробной информации о файлах

      пример использование команды ls -lah для вывода подробной информации о файлах

      2. Чтобы узнать сегодняшнюю дату, нужно выполнить:

      4. Допустим нужно найти файлы и удалить их по определенной дате.

      Если нужно найти все файлы свыше 3 дня и после чего удалить их:

      Если нужно найти все файлы свыше 90 дней и после чего удалить их:

      Если нужно найти все файлы свыше 365 дней и после чего удалить их:

      Если нужно найти все файлы свыше 100 дней и после чего удалить их:

      Удаление файлов старше N дней

      можно еще вот так:

      Ключи:
      -name — искать по имени файла, при использовании подстановочных образцов параметр заключается в кавычки.
      -type — тип искомого: f=файл, d=каталог, l=ссылка (link).
      -user — владелец: имя пользователя или UID.
      -group — владелец: группа пользователя или GID.
      -perm — указываются права доступа.
      -size — размер: указывается в 512-байтных блоках или байтах (признак байтов — символ «c» за числом).
      -atime — время последнего обращения к файлу.
      -ctime — время последнего изменения владельца или прав доступа к файлу.
      -mtime — время последнего изменения файла.
      -newer другой_файл — искать файлы созданные позже, чем другой_файл.
      -delete — удалять найденные файлы.
      -ls — генерирует вывод как команда ls -dgils.
      -print — показывает на экране найденные файлы.
      -exec command <> \; — выполняет над найденным файлом указанную команду; обратите внимание на синтаксис.
      -ok — перед выполнением команды указанной в -exec, выдаёт запрос.
      -depth — начинать поиск с самых глубоких уровней вложенности, а не с корня каталога.
      -prune — используется, когда вы хотите исключить из поиска определённые каталоги.
      N — количество дней.

      Утилита find представляет универсальный и функциональный способ для поиска в Linux. Данная статья является шпаргалкой с описанием и примерами ее использования.

      Общий синтаксис

      find <где искать> <опции>

      <где искать> — путь к корневому каталогу, откуда начинать поиск. Например, find /home/user — искать в соответствующем каталоге. Для текущего каталога нужно использовать точку «.».

      <опции> — набор правил, по которым выполнять поиск.

      * по умолчанию, поиск рекурсивный. Для поиска в конкретном каталоге можно использовать опцию maxdepth.

      Описание опций

      Тип объекта поиска. Возможные варианты:

      • f — файл;
      • d — каталог;
      • l — ссылка;
      • p — pipe;
      • s — сокет.

      Также доступны логические операторы:

      Оператор Описание
      -a Логическое И. Объединяем несколько критериев поиска.
      -o Логическое ИЛИ. Позволяем команде find выполнить поиск на основе одного из критериев поиска.
      -not или ! Логическое НЕ. Инвертирует критерий поиска.

      Полный набор актуальных опций можно получить командой man find.

      Примеры использования find

      Поиск файла по имени

      1. Простой поиск по имени:

      * в данном примере будет выполнен поиск файла с именем file.txt по всей файловой системе, начинающейся с корня /.

      2. Поиск файла по части имени:

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

      3. Несколько условий.

      а) Логическое И. Например, файлы, которые начинаются на sess_ и заканчиваются на cd:

      б) Логическое ИЛИ. Например, файлы, которые начинаются на sess_ или заканчиваются на cd:

      в) Более компактный вид имеют регулярные выражения, например:

      * где в первом поиске применяется выражение, аналогичное примеру а), а во втором — б).

      4. Найти все файлы, кроме .log:

      * в данном примере мы воспользовались логическим оператором !.

      Поиск по дате

      1. Поиск файлов, которые менялись определенное количество дней назад:

      find . -type f -mtime +60

      * данная команда найдет файлы, которые менялись более 60 дней назад.

      2. Поиск файлов с помощью newer. Данная опция доступна с версии 4.3.3 (посмотреть можно командой find --version).

      а) дате изменения:

      find . -type f -newermt "2019-11-02 00:00"

      * покажет все файлы, которые менялись, начиная с 02.11.2019 00:00.

      find . -type f -newermt 2019-10-31 ! -newermt 2019-11-02

      * найдет все файлы, которые менялись в промежутке между 31.10.2019 и 01.11.2019 (включительно).

      б) дате обращения:

      find . -type f -newerat 2019-10-08

      * все файлы, к которым обращались с 08.10.2019.

      find . -type f -newerat 2019-10-01 ! -newerat 2019-11-01

      * все файлы, к которым обращались в октябре.

      в) дате создания:

      find . -type f -newerct 2019-09-07

      * все файлы, созданные с 07 сентября 2019 года.

      find . -type f -newerct 2019-09-07 ! -newerct "2019-09-09 07:50:00"

      * файлы, созданные с 07.09.2019 00:00:00 по 09.09.2019 07:50

      По типу

      Искать в текущей директории и всех ее подпапках только файлы:

      * f — искать только файлы.

      Поиск по правам доступа

      1. Ищем все справами на чтение и запись:

      find / -perm 0666

      2. Находим файлы, доступ к которым имеет только владелец:

      find / -perm 0600

      Поиск файла по содержимому

      find / -type f -exec grep -i -H "content" <> \;

      * в данном примере выполнен рекурсивный поиск всех файлов в директории / и выведен список тех, в которых содержится строка content.

      С сортировкой по дате модификации

      * команда найдет все файлы в каталоге /data, добавит к имени дату модификации и отсортирует данные по имени. В итоге получаем, что файлы будут идти в порядке их изменения.

      Лимит на количество выводимых результатов

      Самый распространенный пример — вывести один файл, который последний раз был модифицирован. Берем пример с сортировкой и добавляем следующее:

      Поиск с действием (exec)

      1. Найти только файлы, которые начинаются на sess_ и удалить их:

      find . -name "sess_*" -type f -print -exec rm <> \;

      * -print использовать не обязательно, но он покажет все, что будет удаляться, поэтому данную опцию удобно использовать, когда команда выполняется вручную.

      2. Переименовать найденные файлы:

      find . -name "sess_*" -type f -exec mv <> new_name \;

      3. Вывести на экран количество найденных файлов и папок, которые заканчиваются на .tmp:

      find . -name "*.tmp" | wc -l

      4. Изменить права:

      find /home/user/* -type d -exec chmod 2700 <> \;

      * в данном примере мы ищем все каталоги (type d) в директории /home/user и ставим для них права 2700.

      5. Передать найденные файлы конвееру (pipe):

      * в данном примере мы использовали find для поиска строки test в файлах, которые находятся в каталоге /etc, и название которых заканчивается на .conf. Для этого мы передали список найденных файлов команде grep, которая уже и выполнила поиск по содержимому данных файлов.

      6. Произвести замену в файлах с помощью команды sed:

      find /opt/project -type f -exec sed -i -e "s/test/production/g" <> \;

      * находим все файлы в каталоге /opt/project и меняем их содержимое с test на production.

      Чистка по расписанию

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

      Открываем на редактирование задания cron:

      0 0 * * * /bin/find /tmp -mtime +14 -exec rm <> \;

      * в данном примере мы удаляем все файлы и папки из каталога /tmp, которые старше 14 дней. Задание запускается каждый день в 00:00.
      * полный путь к исполняемому файлу find смотрим командой which find — в разных UNIX системах он может располагаться в разных местах.

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

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

      В Linux для удаления файлов предусмотрена стандартная утилита rm. Как и все остальные, стандартные утилиты в имени rm тоже заложена определенная идея. Это сокращение от английского слова Remove.

      Удаление файлов в Linux

      Чтобы удалить файл linux достаточно передать в параметрах команде адрес файла в файловой системе:

      Чтобы удалить все файлы, начинающиеся на слово file можно использовать специальный символ *, означает любой символ в любом количестве:

      Эта команда удаления файла в linux должна использоваться очень осторожно, чтобы не удалить ничего лишнего. В утилите есть опция -i, которая заставляет программу спрашивать пользователя перед тем, как удалить файл linux:

      rm: удалить пустой обычный файл «/home/user/file»?

      Если файлов очень много, вы уверены в правильности команды и отвечать каждый раз y неудобно, есть противоположная опция - f. Будут удалены все файлы без вопросов:

      rm -f /home/user/file*

      Для удаления директорий, вместе с файлами и поддиректориями используется опция -R, например:

      rm -Rf /home/user/dir

      Будет удалено все что находиться в папке dir, и эта папка. Только будьте бдительны, чтобы не получился знаменитый патч Бармина:

      Не стоит выполнять эту команду в своей системе, как видите, она удаляет все файлы в файловой системе Linux.

      Удаление файла в linux также возможно с помощью утилиты find. Общий синтаксис find:

      find папка критерий действие

      Например, мы хотим удалить файл linux по имени:

      find . -type f -name "file" -exec rm -f <> \;

      Будут найдены все файлы с именем file в текущей папке и для них вызвана команда rm -f. Можно не вызывать стороннюю утилиту, а использовать действие delete:

      find . -type f -name "file" -delete

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

      find . -regex '\./[a-f0-9\-]\.bak' - delete

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

      find /path/to/files* -mtime +5 -exec rm <> \;

      Будет выполнено удаление файлов через терминал все файлы в папке старше 5-ти дней.

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

      Опцией -n - можно указать количество перезаписей диска, по умолчанию используется 3. А если указать опцию -z программа при последней перезаписи запишет все нулями чтобы скрыть, уничтожение файла.

      Выводы

      Вот и все. Теперь вы знаете как удалить файл в Ubuntu, как видите, делать это не так уж сложно. Если у вас остались вопросы, пишите в комментариях!

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