bsdtar: Wie vermeide ich das Überschreiben vorhandener Dateiinformationen?

bsdtar: Wie vermeide ich das Überschreiben vorhandener Dateiinformationen?

bsdtarhat 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-filesOption 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 bsdtarVersion 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

verwandte Informationen