сценарий bash de-dupe - PullRequest
       13

сценарий bash de-dupe

5 голосов
/ 12 июня 2011

У меня есть сценарий оболочки. Задание cron выполняется один раз в день. На данный момент он просто загружает файл из Интернета с помощью wget, добавляет временную метку к имени файла, а затем сжимает его. Основные вещи.

Этот файл меняется не очень часто, поэтому я хочу удалить загруженный файл, если он уже существует.

Самый простой способ сделать это?

Спасибо!

Ответы [ 4 ]

5 голосов
/ 12 июня 2011

Вам действительно нужно сжать файл?
wget обеспечивает -N, --timestamping, что, очевидно, включает отметку времени.Это значит, что ваш файл находится по адресу www.example.com / file.txt

При первом выполнении:

$ wget -N www.example.com/file.txt
[...]
[...] file.txt saved [..size..]

В следующий разбудет так:

$ wget -N www.example.com/file.txt
Server file no newer than local file “file.txt” -- not retrieving.

За исключением случаев, когда файл на сервере был обновлен.

Это решило бы вашу проблему, если бы вы не сжимали файл.
Если вам действительно нужно сжать его, то, я думаю, я бы пошел со сравнением хэша нового файла / архива иСтарый.Что имеет значение в этом случае, насколько большой загружаемый файл?Стоит ли сначала сжимать его, а затем проверять хэши?Стоит ли распаковывать старый архив и сравнивать хэши?лучше хранить старый хеш в текстовом файле?все ли они имеют преимущество перед перезаписью старого файла?

Вы только это знаете, проведите несколько тестов.


Итак, если вы идете по пути хэширования, рассмотрите сжатие sha256 и xz (алгоритм lzma2).
Я бы сделал что-то вроде этого (в Bash):

newfilesum="$(wget -q www.example.com/file.txt -O- | tee file.txt | sha256sum)"
oldfilesum="$(xzcat file.txt.xz | sha256sum)"
if [[ $newfilesum != $oldfilesum ]]; then
    xz -f file.txt # overwrite with the new compressed data
else
    rm file.txt
fi

и это сделано;

1 голос
/ 12 июня 2011

Рассчитать хеш содержимого файла и сравнить с новым.Используйте, например, md5sum.Вам нужно только сохранить последнюю сумму MD5, чтобы проверить, изменился ли файл.

Кроме того, учтите, что сеть развивается, чтобы предоставлять больше информации о страницах, то есть метаданных.Обоснованный веб-сайт должен включать версию файла и / или дату изменения (или действительный заголовок с истечением срока действия) как часть заголовков ответа.Это и другие вещи составляют основу масштабируемости Web 2.0.

0 голосов
/ 12 июня 2011

Новый файл можно сравнить с последним, используя команду sum .Это берет контрольную сумму файла.Если оба файла имеют одинаковую контрольную сумму, они, скорее всего, будут абсолютно одинаковыми.Есть еще одна команда с именем md5 , которая принимает md5 fingerprint , но команда sum есть во всех системах.

0 голосов
/ 12 июня 2011

Как насчет загрузки файла и проверки его по «последнему сохраненному» файлу?

Например, при первой загрузке myfile, сохранении как myfile-[date] и сжатии.Он также добавляет символическую ссылку, например lastfile, указывающую на myfile-[date].При следующем запуске сценария он может проверить, совпадает ли содержимое того, на что указывает lastfile, с новым загруженным файлом.

Не знаю, сработает ли это хорошо, но я мог быдумать о.

...