निर्देशिका अनुमतियों को पुनर्स्थापित करने के लिए टार फेलिंग से त्रुटियों से बचें


13

मैं दोनों टार 1.26 और 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

तो मैं यहाँ क्या करने की कोशिश कर रहा हूँ एक मौजूदा निर्देशिका संरचना में एक टार फाइल निकाल रहा हूँ, जहाँ मैं शामिल सभी निर्देशिकाओं का मालिक नहीं हूँ, लेकिन मेरे पास उन सभी पर लिखने की अनुमति नहीं है। वास्तव में वे एक समूह के बीच साझा किए जाते हैं।

मुझे टाइमस्टैम्प की परवाह नहीं है, और मुझे विश्वास है कि अनुमति पहले से ही सही होनी चाहिए। मैं इसे एक सामान्य उपयोगकर्ता के रूप में चला रहा हूं, इसलिए इसे --preserve-permissionsतब तक करने की कोशिश नहीं करनी चाहिए , जब तक कि मुझे ऐसा नहीं बताया जाए। क्या वास्तव में मुझे चिंता है बाहर निकलने की स्थिति है: मैं इसे एक स्क्रिप्ट में उपयोग करने का इरादा रखता हूं, और जानना चाहता हूं कि क्या वास्तविक निष्कर्षण ने ठीक काम किया है।

क्या टार का विकल्प है जो यह बताता है कि निर्देशिका अनुमतियों को सेट नहीं करना है, न तो तुरंत और न ही विलंबित? असफल होना, आप अन्य कौन से समाधान सुझाएंगे। अभी मैं एक अस्थायी निर्देशिका को निकालने और rsyncमौजूदा पेड़ में सामान को स्थानांतरित करने के बारे में सोच रहा हूं । लेकिन शायद आप कम हैकिश दृष्टिकोण को जानते हैं।


1
आश्चर्य है कि अगर वहाँ एक तरीका है यह निर्माण के रूप में टार समय में किया जाता है निष्कर्षण का विरोध ..?
रॉय Truelove

जवाबों:


22

यह tarविकल्प वह हो सकता है जो आप खोज रहे हैं:

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

मैंने निम्नानुसार परीक्षण किया:

$ 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
मेरे मामले के लिए भी काम किया, जिसमें मैंने एक घुड़सवार सांबा शेयर के लिए एक टार संग्रह को निकाला। ध्यान दें कि आदेश के विपरीत, यह भी त्रुटि को दबाता है जब गंतव्य खाली होता है (यानी सभी निर्देशिकाएं जो त्रुटियों को स्वयं द्वारा बनाई गई थीं)। एक बार फिर धन्यवाद!
user149408
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.