Смотрю на эти сложности и радует что народ пробует все средства для достижения цели. Задача понятна, но решение не универсальное. А что, если надо скопировать данные только за 14-16 Января 2009? Используйте: find -mtime +$(expr $(expr $(date +%s) — $(date -d «Jan 14 2009» +%s)) / 3600 / 24) -mtime -$(expr $(expr $(date +%s) — $(date -d «Jan 16 2009» +%s)) / 3600 / 24) -type f -exec cp <> TARGET \;
Если надо создать структуру каталогов: find -mtime +$(expr $(expr $(date +%s) — $(date -d «Jan 14 2009» +%s)) / 3600 / 24) -mtime -$(expr $(expr $(date +%s) — $(date -d «Jan 16 2009» +%s)) / 3600 / 24) -type d -exec mkdir TARGET/<> \;
Какойй перл?? проще ман по find почтать а не плодить велосипеды У вас много скриптов на пер/питоне/подставить_нужное на сервере крутится? или просто лениво для примитивных задачек освоить команду man ? P.S больше велосипедов,красивых и разных
1. Несколько лет назад BSDшный date не умел показывать произвольные даты, сейчас не знаю. Такая штука канала только для GNU.
2. Сравните скорость для большого, но обозримого количества файлов: $ for N in ‘seq 1 1 100000’ ; do echo «zzz» > ./$N.testfile ; done $ time find ./ -type f -mtime -1 -exec cp <> ../bbbbbb \;
real 4m23.219s user 0m21.110s sys 3m47.518s $ time cp $(ls -1) $ mkdir ../cccccc $ time cp $(ls -1) ../cccccc/
real 0m5.298s user 0m0.906s sys 0m3.995s $
Но с мыслью я согласен, надо использовать find. $ time cp $(find ./ -type f -mtime -1) ../dddddd/
cp обламывается, потому что столько много аргументов не лезет в буфер командной строки шелла. for — [почти] точно такая же команда шелла с точно таким же буфером. Соответственно, for тоже обломается.
Расово верное решение здесь — передавать стопицот аргументов не через буфер, а через стандартный поток ввода-вывода. В него и двестипицот аргументов влезет:
ls -l . | awk <. >| while read f; do something $f; done
ls -tr /DIR1/DIR2/DIR3/* | while read f; . — все-таки обломалось.
cd /DIR1/DIR2/DIR3/; ls -tr * | while read f; .
Источник
Копирование файлов старше X дней
Смысл такой, нужно скопировать файлы свыше 7 дней с момента их создания в другой каталог. Делаю так
В команде копирования источник и цель местами поменяй.
Поменял их местами, ничего не изменилось. В каталоге 11, у меня тоже есть файлы.
Не смотря на абсурдность — оно у меня работает всегда, в отличие от -r.
И даже cp -Rf так пробовал. Одно и тоже.
Огромное спасибо, заработало.
mtime разве не время последнего изменения? Вроде время создания это ctime. И еще команде find надо передавать путь к каталогу, т. е. звездочка в конце ненужна.
Так по логике вещей ему и нужно время последнего изменения: скорее всего бекап-скрипт пишет. Правда я бы использовал уже существующее решение, например rdiff-backup.
ctime это change time. Разница между mtime и ctime в том что mtime это время изменения файла, а ctime это время изменения метаданных которое изменится в том числе и при изменении файла.
Источник
Как найти и удалить файлы старше конкретной даты в Linux
Как найти и удалить файлы старше конкретной даты в Linux
Хочу в этой теме «Как найти и удалить файлы старше конкретной даты в Linux» рассказать как можно найти и удалить определенные файлы по дате в ОС Linux таких как Debian, Ubuntu или Redhat, Centos. На готовых примера покажу что и как нужно делать.
1. Посмотрим список всех файлов в папке с датой изменения, для этого стоит выполнить команду:
пример использование команды ls -lah для вывода подробной информации о файлах
2. Чтобы узнать сегодняшнюю дату, нужно выполнить:
3. Команда что выше не вывела полную дату, можно это исправить:
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 — количество дней.
Источник
Linux: использование find для поиска файлов старше
find имеет хорошую поддержку для поиска файлов, более измененных менее X дней назад, но как я могу использовать, find чтобы найти все файлы, измененные после определенной даты?
Я не могу найти что-либо на find странице руководства, чтобы сделать это, только для сравнения с временем других файлов или для проверки различий между созданным временем и сейчас. Является ли создание файла с нужным временем и сравнение с этим единственным способом сделать это?
Если у вас есть только «-newer file», вы можете обойти это:
Предполагая, что у вашего касания есть эта опция (у меня сенсорный 5.97).
Нет, вы можете использовать строку даты / времени.
-newerXY reference Сравнивает временную метку текущего файла со ссылкой. Ссылочным аргументом обычно является имя файла (и для сравнения используется одна из его временных меток), но это также может быть строка, описывающая абсолютное время. X и Y являются заполнителями для других букв, и эти буквы выбирают, какое время относится к тому, как ссылка используется для сравнения.
Не имеет прямого отношения к вопросу, но может быть интересным для тех, кто спотыкается здесь.
Команда find напрямую не поддерживает параметр -older для поиска файлов старше определенной даты, но вы можете использовать оператор отрицания (используя пример принятого ответа):
вернет файлы старше указанной даты.
Источник
Как найти и удалить файлы старше X дней в Linux
Очень важно находить и очищать старые файлы, которые больше не нужны через определенный промежуток времени.
Вот быстрый способ сделать это.
В этом кратком руководстве вы узнаете, как находить и удалять файлы старше X дней в Linux и Unix-подобных операционных системах.
Найти и удалить файлы старше X дней в Linux
Отказ от ответственности: вы должны быть очень осторожны при выполнении этих команд.
Эти команды не запрашивают подтверждения перед удалением файлов.
Он просто удалит файлы после нажатия клавиши ENTER. Так что будьте очень осторожны!
Сначала давайте узнаем файлы старше X дней, например 30 дней.
Чтобы сделать так, просто:
Вышеупомянутая команда найдет и отобразит старые файлы старше 30 дней. Вот,
dot (.) – Представляет текущий каталог. -mtime – представляет время изменения файла и используется для поиска файлов старше 30 дней. -print – отображает старые файлы
Если вы хотите искать файлы в определенном каталоге, просто замените точку на путь папки.
Например, чтобы узнать файлы, которые старше 30 дней в каталоге / home / sk / Downloads, просто запустите:
Теперь, чтобы удалить файлы, запустите любую из следующих команд.
Снова предупреждаю вас, что эти команды будут удалять файлы сразу после нажатия кнопки ENTER.
Перед выполнением этих команд будьте осторожны и дважды проверьте их.
Периодически удаляйте старые файлы, если они не нужны через регулярные промежутки времени, или резервируют их на любые внешние диски и освобождают место на диске.
Вы можете использовать свободное пространство для любых других полезных целей.