4

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

однако tar содержит информацию о временной метке, и поэтому я получаю разные архивные файлы, даже если их содержимое одинаковое.

как я могу создать архив (с tar, zip или чем-то еще), который не содержит информацию о метках времени?

Примечание. Мне известно, что даже если два файла tar отличаются, я могу игнорировать их временные метки и сравнивать только их содержимое с такими инструментами, как tar --diff или tarsum . Однако мне не разрешается использовать какой-либо другой внешний инструмент для сравнения (из-за моей настройки); Я просто могу проверить два архивных файла на точное равенство.

Примечание. Мне известно, что я могу установить временную метку для всех файлов с заданным значением до архивирования файлов, поэтому их временные метки будут одинаковыми. Однако файлов много, и я не хочу этого делать. Я просто хочу заархивировать эти файлы без метки времени

пример:

$ mkdir copy1
$ touch copy1/file1
$ touch copy1/file2

$ sleep 60
$ mkdir copy2
$ touch copy2/file1
$ touch copy2/file2

$ ls -l copy1
total 0
-rw-r--r--  1 david  wheel  0 Oct 27 00:59 file1
-rw-r--r--  1 david  wheel  0 Oct 27 00:59 file2

$ ls -l copy2
total 0
-rw-r--r--  1 david  wheel  0 Oct 27 01:00 file1
-rw-r--r--  1 david  wheel  0 Oct 27 01:00 file2

# the content of those files is the same; they only differ by the their timestamp    

$ (cd copy1; tar -cvf ../copy1.tar .)
$ (cd copy2; tar -cvf ../copy2.tar .)

$ tar -tvf copy1.tar
drwxr-xr-x  0 david  wheel       0 Oct 27 00:59 ./
-rw-r--r--  0 david  wheel       0 Oct 27 00:59 ./file1
-rw-r--r--  0 david  wheel       0 Oct 27 00:59 ./file2

$ tar -tvf copy2.tar
drwxr-xr-x  0 david  wheel       0 Oct 27 01:00 ./
-rw-r--r--  0 david  wheel       0 Oct 27 01:00 ./file1
-rw-r--r--  0 david  wheel       0 Oct 27 01:00 ./file2

$ diff copy1.tar copy2.tar 
Binary files copy1.tar and copy2.tar differ

Я пробовал с zip -X вместо tar , но получаю тот же результат

1 ответ1

0

Даже если вы полностью отключите временную метку, я не был бы на 100% уверен, что это спасет вас в любом случае. На самом деле порядок файлов может изменить результаты (т. Е. «Tar cf a.tar file1 file2» отличается от «tar cf b.tar file2 file1», но по вашей спецификации содержимое совпадает, и порядок может зависеть от файловой системы). ).

Я бы посоветовал вам сделать что-то более четкое, чем просто сравнение файлов, как вы сказали (md5sum и так далее).

Если вы действительно хотите, чтобы сравнение работало просто, я могу предложить простую оболочку, которая прикрепляет файлы с заголовком имени файла, например:

for i in file1 file2; do echo "$i"; cat $i; done; 

Вы, конечно, можете распаковать его, если хотите. И будьте осторожны, чтобы всегда сохранять порядок.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .