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

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

Хочу в этой теме «Как найти и удалить файлы старше конкретной даты в Linux» рассказать как можно найти и удалить определенные файлы по дате в ОС  Linux таких как Debian, Ubuntu или Redhat, Centos. На готовых примера покажу что и как нужно делать.

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

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

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

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

# date

on Jul 14 04:04:52 EEST 2014

3.  Команда что выше не вывела полную дату, можно это исправить:

# ls --full-time

total 36576
drwxr-xr-x 8 root root 4096 2014-06-06 07:16:21.000000000 +0300 firefox
-rw-r--r-- 1 root staff 37445961 2014-06-06 07:21:16.000000000 +0300 firefox-30.0.tar.bz2

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

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

# find /home/captain -type f -mtime +3 -exec rm -rf {} \;

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

# find /home/captain -type f -mtime +90 -exec rm -rf {} \;

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

# find /home/captain -type f -mtime +365 -exec rm -rf {} \;

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

# find /home/captain -type f -mtime +100 -exec rm -rf {} \;

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

$ find /dir/ -atime +N | xargs rm -f

так же:

$ find /dir/ -atime +N -delete

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

$ find /dir/ -name "*.jpg" -mtime +N -exec rm -f {} \;

Ключи:
-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 — количество дней.

Вот собственно и все, завершил я тему «Как найти и удалить файлы старше конкретной даты в Linux», очень все просто, если знаешь что и как. Спасибо что читаете мой блог http://linux-notes.org

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

  1. ДД!
    а как сделать, чтобы удалялись не только файлы, но и старые папки тоже?
    прошу прощения если это глупый вопрос, не силен в этом.
    спасибо.

    • Опция «-type» может содержать в себя несколько вариантов использования:
      f — используется для поиска файлов.
      в — используется для поиска папок.

      И так, приведу пример (Если нужно найти все папки свыше 3 дней и после чего удалить их):

      # find /home/captain -type d -mtime +3 -exec rm -rf {} \;
      

      Все просто.

      • почему то именно операции с папками не работают, с файлами все норм, они удаляются в папках и подпапках.
        задача такая: есть сетевое хранилище Synology, ОС на базе линукса — называется DSM. хочу подпихнуть к нему скрипт, чтобы удалялись файлы и папки старше N дней.
        то что вы написали, это я пробовал.
        даже так:
        #find /volume1/WIN10 -type f -mtime +1 -exec rm -rf {} \;
        #find /volume1/WIN10 -type d -mtime +1 -exec rm -rf {} \;
        поэтому и написал, что не работает.

  2. find /volume1/WIN10 -mtime +1 -exec rm -rf {} \;
    все работает, без всяких -type, удаляет файлы и папки

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

    $ find /home/user/zzz -mtime 5 -exec ls -la {} \;
    
    -rw-rw---- 1 mail mail 12260 сен  1 16:05 /home/user/zzz/540699.msg
    -rw-rw---- 1 mail mail 350712 авг 31 17:38 /home/user/zzz/537993.msg
    -rw-rw---- 1 mail mail 174459 авг 31 17:58 /home/user/zzz/538098.msg
    -rw-rw---- 1 mail mail 12655 сен  1 12:45 /home/user/zzz/539733.msg
    -rw-rw---- 1 mail mail 12564 сен  1 16:18 /home/user/zzz/540767.msg
    -rw-rw---- 1 mail mail 12300 авг 31 19:21 /home/user/zzz/538403.msg
    -rw-rw---- 1 mail mail 12346 сен  1 10:53 /home/user/zzz/539255.msg
    -rw-rw---- 1 mail mail 12092 сен  1 11:48 /home/user/zzz/539492.msg
    -rw-rw---- 1 mail mail 11648 сен  1 15:00 /home/user/zzz/540352.msg
    -rw-rw---- 1 mail mail 12466 сен  1 12:38 /home/user/zzz/539725.msg
    -rw-rw---- 1 mail mail 12793 авг 31 19:41 /home/user/zzz/538461.msg
    -rw-rw---- 1 mail mail 12279 сен  1 10:00 /home/user/zzz/539076.msg
    -rw-rw---- 1 mail mail 15060 сен  1 17:26 /home/user/zzz/541103.msg
    -rw-rw---- 1 mail mail 12295 сен  1 15:22 /home/user/zzz/540470.msg
    
  4. -mtime 5 — не означает кол-во дней, а означает кол-во часов, т.е. в моем примере это 120 часов от текущего времени, поэтому в вывод команды попали файлы за 6 день. В вобщем надо быть внимательным при использовании данной опции

    • курим ман:

      -atime n
      File was last accessed n*24 hours ago. When find figures out how many 24-hour periods ago the file was last
      accessed, any fractional part is ignored, so to match -atime +1, a file has to have been accessed at least two days
      ago.

      Именно дней, а не часов, как вы утверждали.

  5. В каталоге есть 10 папок, как удалить именно 10-ю, т.е. самую старую папку без опций со временем?

  6. Здравствуйте.Посмотрите пожалуйста:
    su pkpvd pkpvd

    /opt/pkpvd/rs/backend/log/service-pvd-rs.out {
    notifempty
    copytruncate
    daily
    rotate 3
    compress
    missingok
    postrotate
    find /opt/pkpvd/rs/backend/log-rs/ -name «*.log» -mtime +7 -delete
    find /opt/pkpvd/rs/backend/tmp/ -name «*.log.zip» -mtime +7 -delete
    find /opt/pkpvd/rs/backend/tmp/ -name «*.log.gz» -mtime +7 -delete
    find /opt/pkpvd/rs/backend/tmp/ -name «*.txt» -mtime +7 -delete
    endscript
    }
    Мне надо,чтобы из этого каталога удалялись файлы с этими расширениями.Оставались за последние 7 дней.Что не так,т.к. не работает удаление.Что означает команда rotate?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

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