Tar
bsdtar:如何避免覆蓋現有文件資訊?
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
.
原來這是一個錯誤。我將它交叉發佈到 libarchive-discuss並且其中一位維護者做出了這樣的回應。在以下位置提出問題:https ://github.com/libarchive/libarchive/issues/972