У меня большой каталог файлов, и я хотел бы поддерживать единый сжатый tar-архив, который я могу серверить через http, содержащий все файлы, которые обновляются один раз в день.
Многие файлы не будут меняться изо дня в день, и я бы хотел, чтобы процессор не тратил много времени на сжатие одних и тех же файлов каждый день.
tar "не может обновлять сжатые архивы", поэтому tar uj
не поможет.
Есть ли умный способ сделать это?
Эта идея была на форум совета конкурентов.
tar cf --newer YYYYMMDD
To copy differences or only the files since the last tar date
here is the command.
Let's say we did a tar on Feb 9th, 2009 as follows:
(cd /mydata; tar cf - *) | tar xvf -
Today is Feb 11th and we only want to copy the files that have changed
since Feb 9th, 2009. The command would be
(cd /mydata; tar cf - --newer 20090209 * ) | tar xvf -
Поскольку доступ к нему осуществляется через http, используйте PHP для генерации tar-файла на лету, используя что-то вроде этого:
<?php
set_time_limit(1);
header("Pragma: public"); // required
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false); // required for certain browsers
header("Content-Type: application/x-bzip2; charset=binary");
header("Content-Disposition: attachment; filename=\"archive.tar.bz2\";" );
passthru("tar cj --exclude-vcs /path/to/files",$err);
if ($err) {
error_log("exit value: $err");
}
exit;
Очевидно, это не поможет в случае, если этот файл будет много загружаться.