bsdtar
hat eine -k (Do not overwrite existing files)
Option, die das Ändern des Inhalts vorhandener Dateien vermeidet, aber dennoch die Dateiinformationen (z. B. Berechtigungen) mit dem Inhalt des Archivs überschreibt. Gibt es eine Möglichkeit, das bsdtar
Überschreiben vorhandener Dateien vollständig zu überspringen und die Dateiinformationen intakt zu lassen, so wie die --skip-old-files
Option in GNU Tar funktioniert?
Hier ist ein Skript, das das Problem demonstriert:
#!/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
Hier ist die Skriptausgabe:
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
Meine bsdtar
Version ist 3.3.2
.
Antwort1
Es stellte sich heraus, dass es sich um einen Fehler handelt. Ich habe es gepostet auf libarchive-diskussionund einer der Betreuer antwortete entsprechend. Ein Problem gemeldet unter:https://github.com/libarchive/libarchive/issues/972