Katranın dizin izinlerini geri yükleyememesi hatalarından kaçının


13

Hem tar 1.26 hem de 1.27.1 ile aşağıdaki davranışı gözlemliyorum:

$ 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

Burada yapmaya çalıştığım şey, katıldığı tüm dizinlerin sahibi olmadığım bir tar dosyasını mevcut bir dizin yapısına ayıklamak, ancak hepsine yazma iznim var. Aslında bir grup arasında paylaşılıyorlar.

Zaman damgalarını umursamıyorum ve izinlerin zaten doğru olması gerektiğine inanıyorum. Bunu normal bir kullanıcı olarak çalıştırıyorum, bu yüzden --preserve-permissionssöylemediğim sürece denememeliydim, ki ben yapmadım. Beni gerçekten endişelendiren çıkış durumudur: Bunu bir senaryoda kullanmak niyetindeyim ve gerçek çıkarımın işe yarayıp yaramadığını bilmek istiyorum.

Söyler katran için bir seçenek var mı yok , set dizin izinleri ne hemen ne de gecikmeli? Bunu başaramazsanız, başka hangi çözümleri önerirsiniz. Şu anda geçici bir dizine çıkartmayı rsyncve mevcut ağaca bir şeyler taşımak için kullanmayı düşünüyorum . Ama belki de daha az hackish bir yaklaşım biliyorsunuzdur.


1
Ekstraksiyon yerine zift oluşturma zamanında bunu yapmanın bir yolu olup olmadığını merak ediyor musunuz?
Roy Truelove

Yanıtlar:


22

Bu tarseçenek aradığınız şey olabilir:

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

Aşağıdaki gibi test ettim:

$ 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

1
Ayrıca bir Samba paylaşımına katran arşivi çıkardığım da davam için çalıştı. Komutun önerdiğinden farklı olarak, hedef boş olduğunda da hatayı bastırdığını unutmayın (yani hata verecek tüm dizinler tar'ın kendisi tarafından oluşturulmuştur). Tekrar teşekkürler!
user149408
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.