Не совсем ясно, какова цель, но это кажется простой эффективностью, поэтому я думаю, что вы должны сделать два изменения: 1) проверить время модификации, как вы предлагаете, и не беспокоить сравнение содержимого, если несжатый файл не новее, чем сжатый файл, и 2) используйте zcmp
вместо zdiff
.
Взяв # 2 первым, ваш скрипт делает это:
DIFFS=$(zdiff "$1" "$1.gz" | wc -c)
if [[ $DIFFS -eq 0 ]]
, которая выполнит полный анализ потенциально больших файлов, подсчитает символы в выводе diff и проверит количество. Но все, что вы действительно хотите знать, это то, отличается ли контент. cmp
лучше для этого, так как он будет сканировать побайтово и останавливаться, если обнаружит разницу. Не нужно времени, чтобы отформатировать хорошее текстовое сравнение (которое вы в основном игнорируете); его статус выхода говорит вам результат. zcmp
не так эффективен, как raw cmp
, поскольку сначала нужно будет распаковать, но у zdiff
такая же проблема.
Таким образом, вы можете переключиться на zcmp
(и исключить использование подоболочки, исключить wc
, не вызывать [[
и избежать помещения потенциально больших текстовых различий в переменную), просто изменив две вышеупомянутые строки на это:
if zcmp -s "$1" # if $1 and $1.gz are the same
Чтобы пойти дальше и сначала проверить время модификации, вы можете использовать опцию -nt
(новее) для команды test
(также известной как квадратная скобка), переписав приведенную выше строку следующим образом:
if [ ! "$1" -nt "$1.gz" ] || zcmp -s "$1"
, в котором говорится, что если несжатая версия не новее сжатой версии ИЛИ, если они имеют одинаковое содержимое, то $ 1 уже распакован, и вы можете удалить его. Обратите внимание, что если несжатый файл не новее, zcmp
не будет работать вообще, сохраняя некоторые циклы.
Остальная часть вашего скрипта должна работать как есть.
Одно предостережение: время модификации очень легко изменить. Простое перемещение сжатого файла с одного компьютера на другой может изменить его время модификации, поэтому вам нужно будет рассмотреть свой собственный случай, чтобы узнать, является ли проверка режима времени действительной оптимизацией или больше проблем, чем стоит.