bsdtar: 기존 파일 정보 덮어쓰기를 방지하는 방법은 무엇입니까?

bsdtar: 기존 파일 정보 덮어쓰기를 방지하는 방법은 무엇입니까?

bsdtar-k (Do not overwrite existing files)기존 파일의 내용을 변경하지 않지만 여전히 파일 정보(예: 권한)를 아카이브 내용으로 덮어쓰는 옵션이 있습니다 . GNU tar의 옵션 bsdtar처럼 파일 정보를 그대로 유지하면서 기존 파일 덮어쓰기를 완전히 건너뛰는 방법이 있습니까 ?--skip-old-files

다음은 문제를 보여주는 스크립트입니다.

#!/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

관련 정보