Меню Рубрики

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

Команды для удаления большого количества файлов в Linux

Удаление старых файлов linux по маске чаще всего осуществляется следующим образом:

Веб-сервер указан для примера. Синтаксис очень прост — команда принудительно удалит все файлы с расширением .log в указанном каталоге, при этом удаление будет рекурсивным(-r — recursive) и подтверждения система при этом спрашивать не будет (-f — force).

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

Если rm -rf не помогает — удалять файлы следует в цикле for. Для каждого файла будет отдельная операция удаления и никаких ограничений системы здесь ожидать не приходится.

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

for f in /var/log/apache2/*.log; do rm «$f»; done

В цикл for можно добавить любую дополнительную логику.

Удаление старых файлов в Linux по Cron

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

# m h dom mon dow command

23 3 * * * find /var/www/web/sites/server-gu.ru/www/var/session/ -type f -mtime 7 -exec rm -f <> \;

В примере удаляются сессии РНР для сайта старше 7 дней.

В цикле то же самое можно сделать так:

for f in /tmp/logs/*.log

find $f -mtime +7 -exec rm <> \;

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

Источник

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

подскажите как с помощью rm удалить все файлы с расширением *.txt ?
заранее спасибо.

Ответить | Правка | Cообщить модератору

Оглавление

  • Удалить файлы по маске *.txt, chainik, 11:49 , 13-Мрт-09, (1)
  • Удалить файлы по маске *.txt, djaarf, 14:28 , 13-Мрт-09, (2)
  • Удалить файлы по маске *.txt, Veon, 16:52 , 13-Мрт-09, (3)
    • Удалить файлы по маске *.txt, djaarf, 21:19 , 13-Мрт-09, (5)

>доброго дня,
>
>подскажите как с помощью rm удалить все файлы с расширением *.txt ?
>
>заранее спасибо.

Откуда удалить? Со всех хостов инета?

1. «Удалить файлы по маске *.txt» + / –
Сообщение от chainik (??) on 13-Мрт-09, 11:49
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. «Удалить файлы по маске *.txt» + / –
Сообщение от djaarf (??) on 13-Мрт-09, 14:28

>доброго дня,
>
>подскажите как с помощью rm удалить все файлы с расширением *.txt ?
>
>заранее спасибо.

Чудесная утилита find тебе поможет.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

3. «Удалить файлы по маске *.txt» + / –
Сообщение от Veon (??) on 13-Мрт-09, 16:52

>доброго дня,
>
>подскажите как с помощью rm удалить все файлы с расширением *.txt ?
>
>заранее спасибо.

find /home/vasya -name «*.txt» | xargs rm

В зависимости от контретной ситуации

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

5. «Удалить файлы по маске *.txt» + / –
Сообщение от djaarf (??) on 13-Мрт-09, 21:19

>>доброго дня,
>>
>>подскажите как с помощью rm удалить все файлы с расширением *.txt ?
>>
>>заранее спасибо.
>
>find /home/vasya -name «*.txt» | xargs rm

Можно обойтись одним find
find path -type f -name «*.txt» -delete
>
>rm *.txt, rm -r *.txt
>
>В зависимости от контретной ситуации

Источник

удаление файлов рекурсивно по маске с датой создания не позднее чем Х дней назад

задача: удалить все файлы в категории и ее подкатегориях, которые попадают под маску, но при этом созданы не позднее чем 3 дня назад (т.е. оставим все самые свежие — за последние три дня).

удаление просто по маске: find PATH -name «*.FILE_EXT» -exec rm <> \;

а как удалить с учетом требования по дате?

atime, mtime насчет «созданных» — не знаю.

find -ctime +DAYS PATH -name «*.FILE_EXT» -exec rm <> \;

DAYS — кол-во дней PATh — путь к корневой директории *.FILE_EXT — маска для файла

удалит все файлы с датой создания старше 3-х дней по заданной маске

Это делается проще: «-delete». Если ты этого не знал, то ман не прочитал, поэтому в первую очередь советую его сначала таки прочитать, а потом бежать на лор. Конкретно понадобятся опции -*time, -newer, -newer*.

удалит все файлы с датой создания старше 3-х дней

Всё-таки ман не прочитал. А там белым по чёрному написано:

-ctime n File’s status was last changed n*24 hours ago.

Это не дата создания.

-delete будет работать быстрее? если да, насколько?

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

А просто взять и проверить лень? В случае использования «-delete» find сам сразу делает unlink(), а в случае «-exec rm» для каждого файла будет вызываться fork(), exec(), создастся новый процесс rm, который получит имя файла из командой строки, распарсит параметры и в конце концов сделает unlink. Конечно, первое быстрее, чем второе.

BTW, ещё можно так: «-exec rm ‘<>‘ +», тогда в командную строку rm передадутся сразу несколько путей и лишних процессов будет меньше, чем при «-exec rm ‘<>‘ \;».

Ты же понимаешь, что это зависит от множества факторов, и на разных компьютерах разница будет разной?

в данном случае нужно было найти файлы именно созданные от нужной даты

Ну так анонимус всё правильно говорит, потому что ctime — это не дата создания. Он может меняться. Не можешь прочитать ман, так прочитай Википедию:

-ctime — время последнего изменения владельца или прав доступа к файлу.

В тред врывается zsh, и выносит find

man я читала.
в моем случае ни права, ни группа\пользователь не меняются, и это самое близкое что я нашла к дата_создания (мне не нужна дата модификации).

если вы знаете способ сравнивать именно _дату_создания_, напишите пожалуйста

если вы знаете способ сравнивать именно _дату_создания_, напишите пожалуйста

Например, параметр «-newerBt». В данном случае будет что-то типа:

find «$path» ! -newerBt ‘3 day ago’ -delete

Но на моей ФС (ext4) это не работает — похоже, что она вообще не сохраняет дату создания. Если это так, то проблему в исходном виде решить не получится и придётся использовать ctime. Возможно, на других ФС будет работать и вариант с -newerBt.

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

дата_создания (мне не нужна дата модификации)

Часто модификация приводит к тому, что исходный файл удаляется, вместо него остается измененная копия (inode соотвественно меняется).

vcs развернуть и смотреть дату создания его средствами не судьба?

Источник

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

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

  • Как узнать какая файловая система на mac os
  • Как узнать какая версия mac os установлена
  • Как узнать какая mac os стоит на компьютере
  • Как узнать версию mac os через терминал
  • Как узнать в mac os пароль и имя администратора