Я бы предпочел не делать этого в PHP, так что я надеюсь, что кто-то приличный в написании сценариев может помочь.
Мне нужен скрипт, который рекурсивно проходит через каталог и находит все файлы с датой последнего изменения, превышающей некоторую дату. Затем он заархивирует файл (ы) и сохранит информацию о пути.
Ответы:
так просто как:
где
find . -mtime -1
выберет все файлы в (рекурсивно) текущем каталоге, измененном днем ранее. Вы можете использовать дроби, например:источник
-newermt
это намного лучше.-type f
только для выбора файлов. Это поддерживает структуру папок, но создает резервные копии только файлов с изменениями.Если у вас есть GNU
find
, то есть множество соответствующих опций. Единственная загвоздка в том, что интерфейс к ним менее звездный:-mmin n
(время модификации в минутах)-mtime n
(время модификации в днях)-newer file
(время модификации новее, чем время модификации файла)-daystart
(отрегулируйте время начала от текущего времени до начала дня)Трудная часть - это определение количества минут с определенного времени.
Стоит рассмотреть один вариант: использовать
touch
для создания файла с необходимой отметкой времени модификации; затем используйтеfind
с-newer
.Это ищет файлы, более новые, чем 2009-01-03T12: 31: 43. Понятно, что в скрипте
/tmp/wotsit
будет имя с PID или другим значением, чтобы сделать его уникальным; и было бы,trap
чтобы гарантировать, что это будет удалено, даже если пользователь прерывает, и так далее, и так далее.источник
-newermt '2009-01-03T12:31:43'
чтобы избежать необходимости создавать файл только для справки.-newermt
(документировано,-newerXY
поскольку существует несколько опций; в данном случае X = m, Y = t). Поиск GNU в (почти архаичных) системах Linux, которые я использую, не поддерживает опции, так что это относительно недавнее появление. Спасибо за внимание.-newermt '-2 weeks'
,-newermt '2009-01-03T12:31:43'
выглядит потрясающе, но, к сожалению, кажется, что все интерпретируется в неправильном часовом поясе: lists.gnu.org/archive/html/bug-findutils/2012-12/msg00009.htmlВы можете сделать это напрямую с помощью tar и даже лучше:
Это дает tar команду сжимать файлы, выпущенные до 1 января 2014 года, 18:00:00.
источник
tar
этого поставляются только с поддержкой OS X и FreeBSD,--newer
что является длинным вариантом для-N
GNUtar
.Это будет работать для некоторого количества файлов. Вы хотите включить «-print0» и «xargs -0» на случай, если в любом из путей есть пробелы. Этот пример ищет файлы, измененные за последние 7 дней. Чтобы найти те, которые были изменены до последних 7 дней, используйте «+7».
Как предупреждает эта страница , xargs может вызвать многократное выполнение команды tar, если аргументов много, а флаг «-c» может вызвать проблемы. В этом случае вы хотели бы это:
Вы не можете обновить заархивированный архив tar с помощью tar, поэтому вам придется выполнить bzip2 или gzip на втором шаге.
источник
-type f
только для выбора файлов. Это поддерживает структуру папок, но только создает резервные копии файлов с изменениями / добавленными недавно.Это должно показать все файлы, измененные за последние 7 дней.
Отправьте это в tar / zip, и вы должны быть хорошими.
источник
Я бы просто сделал следующее, чтобы сделать резервную копию всех новых файлов от 7 дней назад
обратите внимание, что вы также можете заменить «7 дней назад» на все, что вам нужно
Возможно :
date -d'yesterday' +"%d-%b"
Или даже :
date -d'first Sunday last month' +"%d-%b"
источник
хорошо под linux попробуйте прочитать man-страницу команды find
как то так должно
и у тебя это есть
источник
Вы можете получить список файлов, которые были последний раз изменены позднее, чем x дней назад, с помощью:
Тогда вам просто нужно архивировать и архивировать файлы в результирующем списке, например:
для всех файлов, измененных за последний месяц.
источник
Этот скрипт найдет файлы с датой изменения за две минуты до и после указанной даты (и вы можете изменить значения в условиях согласно вашему требованию)
Например , вы хотите , чтобы файлы , имеющие дату изменения до того , как данная дата только вы можете изменить ,
120
чтобы0
в$DIFF_IN_DATE
параметре отбрасывая условия$DIFF_IN_DATE1
параметра.Аналогично, если вы хотите, чтобы файлы имели дату изменения за 1 час до и после заданной даты, просто замените их
120
на3600
inif CONDITION
.источник