bsdtar
есть -k (Do not overwrite existing files)
опция, которая позволяет избежать изменения содержимого любых существующих файлов, но она все равно перезаписывает информацию о файле (например, разрешения) тем, что есть в архиве. Есть ли способ bsdtar
полностью пропустить перезапись существующих файлов, оставив информацию о файле нетронутой, так же, как эта --skip-old-files
опция работает в GNU tar?
Вот скрипт, демонстрирующий проблему:
#!/usr/bin/env bash
echo -e "\nCreate an archive with normal files"
rm -rf test-tar
mkdir test-tar
echo "TEST CONTENTS 1" > test-tar/1.txt
echo "TEST CONTENTS 2" > test-tar/2.txt
ls -la test-tar
bsdtar -czf test.tgz test-tar
echo -e "\nChange contents and permissions of one of the files"
echo "MORE CONTENTS" >> test-tar/2.txt
chmod 000 test-tar/2.txt
ls -la test-tar
echo -e "\nUntar the archive with -k (Do not overwrite existing files). The file contents are intact, but the file permissions have changed"
bsdtar -xzkf test.tgz
ls -la test-tar
cat test-tar/2.txt
echo -e "\nUntar the archive without -k"
bsdtar -xzf test.tgz
ls -la test-tar
cat test-tar/2.txt
Вот вывод скрипта:
Create an archive with normal files
total 16
drwxr-xr-x 4 rbrainard wheel 136 Nov 29 17:53 .
drwxr-xr-x 14 rbrainard wheel 476 Nov 29 17:53 ..
-rw-r--r-- 1 rbrainard wheel 16 Nov 29 17:53 1.txt
-rw-r--r-- 1 rbrainard wheel 16 Nov 29 17:53 2.txt
Change contents and permissions of one of the files
total 16
drwxr-xr-x 4 rbrainard wheel 136 Nov 29 17:53 .
drwxr-xr-x 14 rbrainard wheel 476 Nov 29 17:53 ..
-rw-r--r-- 1 rbrainard wheel 16 Nov 29 17:53 1.txt
---------- 1 rbrainard wheel 30 Nov 29 17:53 2.txt
Untar the archive with -k (Do not overwrite existing files). The file contents are intact, but the file permissions have changed
total 16
drwxr-xr-x 4 rbrainard wheel 136 Nov 29 17:53 .
drwxr-xr-x 14 rbrainard wheel 476 Nov 29 17:53 ..
-rw-r--r-- 1 rbrainard wheel 16 Nov 29 17:53 1.txt
-rw-r--r-- 1 rbrainard wheel 30 Nov 29 17:53 2.txt
TEST CONTENTS 2
MORE CONTENTS
Untar the archive without -k
total 16
drwxr-xr-x 4 rbrainard wheel 136 Nov 29 17:53 .
drwxr-xr-x 14 rbrainard wheel 476 Nov 29 17:53 ..
-rw-r--r-- 1 rbrainard wheel 16 Nov 29 17:53 1.txt
-rw-r--r-- 1 rbrainard wheel 16 Nov 29 17:53 2.txt
TEST CONTENTS 2
Моя bsdtar
версия такая 3.3.2
.
решение1
Оказалось, что это ошибка. Я переслал ее в libarchive-обсуждениеи один из сопровождающих ответил так. Подал вопрос по адресу:https://github.com/libarchive/libarchive/issues/972