Hindari kesalahan karena tar gagal mengembalikan izin direktori

13

Saya mengamati perilaku berikut dengan tar 1.26 dan 1.27.1:

$ mkdir a b a/diffowner
$ sudo mkdir b/diffowner
$ sudo chmod a+w b/diffowner
$ echo foo > a/diffowner/foo
$ tar -C a -cvf test.tar diffowner
diffowner/
diffowner/foo
$ tar -C b -xvf test.tar diffowner
diffowner/
diffowner/foo
tar: diffowner: Cannot utime: Operation not permitted
tar: diffowner: Cannot change mode to rwxr-xr-x: Operation not permitted
tar: Exiting with failure status due to previous errors

Jadi apa yang saya coba lakukan di sini adalah mengekstraksi file tar ke dalam struktur direktori yang sudah ada, di mana saya bukan pemilik semua direktori yang terlibat, tetapi saya memiliki izin tertulis untuk semuanya. Bahkan mereka dibagi di antara kelompok.

Saya tidak peduli dengan cap waktu, dan saya percaya bahwa izin harus sudah benar. Saya menjalankan ini sebagai pengguna biasa sehingga tidak boleh mencoba --preserve-permissionskecuali diberitahu begitu, yang saya tidak lakukan. Yang benar-benar mengkhawatirkan saya adalah status keluar: Saya bermaksud menggunakan ini dalam skrip, dan ingin tahu apakah ekstraksi yang sebenarnya berfungsi dengan baik.

Apakah ada opsi untuk tar yang memberitahukannya untuk tidak mengatur izin direktori, baik segera maupun ditunda? Gagal itu, apa solusi lain yang akan Anda sarankan. Saat ini saya sedang berpikir tentang mengekstraksi ke direktori sementara dan menggunakan rsyncuntuk memindahkan barang ke pohon yang ada. Tapi mungkin Anda tahu pendekatan yang kurang hackish.

MvG
sumber
1
Ingin tahu apakah ada cara untuk melakukan ini pada waktu pembuatan tar yang bertentangan dengan ekstraksi ..?
Roy Truelove

Jawaban:

22

tarOpsi ini mungkin yang Anda cari:

 --no-overwrite-dir
       preserve metadata of existing directories

Saya diuji sebagai berikut:

$ mkdir a b a/diffowner
$ sudo mkdir b/diffowner
$ sudo chmod a+w b/diffowner
$ echo foo > a/diffowner/foo
$ tar -C a -cvf test.tar diffowner
diffowner/
diffowner/foo
$ tar -C b --no-overwrite-dir -xvf test.tar diffowner
diffowner/
diffowner/foo
$ echo $?
0
terdon
sumber
1
Juga berfungsi untuk kasus saya, di mana saya mengekstrak arsip tar ke share Samba yang terpasang. Perhatikan bahwa tidak seperti perintah yang disarankan, itu juga menekan kesalahan ketika tujuan kosong (yaitu semua direktori yang akan memberikan kesalahan dibuat oleh tar itu sendiri). Terima kasih lagi!
user149408