निर्दिष्ट अनुमतियों के साथ फ़ाइल और फ़ोल्डर्स निकालें


11

मैं विंडोज में 7zip के साथ बहुत सारे उप-फ़ोल्डर्स और फ़ाइलों के साथ एक फ़ोल्डर पैक करता हूं, VPS पर अपलोड करता हूं और फिर कमांड चलाता हूं:

tar -xvzf file.tar.gz

फिर सभी अनपैक की गई फ़ाइलों और फ़ोल्डरों में 777 की अनुमति है। मुझे यह कैसे मिलेगा ताकि फ़ोल्डरों को 755 और फाइल 644 की अनुमति हो?


"कमांड लाइन फू" नामक एक वेबसाइट है जिसमें बहुत सारे अन्य विचार भी हैं।
djangofan

जवाबों:


14

यदि आप tar(1)एक नियमित उपयोगकर्ता के रूप में चल रहे हैं , तो यह आपके umaskडिफ़ॉल्ट रूप से लागू होगा । यदि आप के tar(1)रूप में चल रहे हैं root, तो आप --no-same-permissionsकमांड लाइन विकल्प दे सकते हैं tar(1)ताकि सम्मान करने के लिए पूछ सकें umask

तो: या तो इसे एक नियमित उपयोगकर्ता के रूप में चलाएं:

umask 022
tar zxvf file.tar.gz

या इसे इस रूप में चलाएं root:

umask 022
tar zxvf file.tar.gz --no-same-permissions

आप रहना चाहते हो सकता है umask 022में अपने ~/.bashrc, ~/.bash_profileया ~/.profile। ( bash(1)स्टार्ट अप फ़ाइलों पर पूर्ण विवरण के लिए मैनपेज देखें । यह जटिल है।)

विवरण umaskआपके शेल के मेनपेज, umask(2)सिस्टम-कॉल मैनपेज, या umask(1posix)पोसिक्स-प्रदान उपयोगिता मैनपेज (यदि आपके पास manpages-posixस्थापित है) में पाया जा सकता है।


umask 022 tar zxvf file.tar.gz -> यह मुझसे प्रत्येक फाइल के लिए अलग से पुष्टि करने के लिए कहता है यदि मैं इसे निकालना चाहता हूं

क्या आप ऐसा करते समय मौजूदा फ़ाइलों को ओवर-राइट कर रहे हैं?
सितंबर

6

अपनी निर्देशिका और फ़ाइलों के लिए वांछित अनुमतियाँ सेट करने के लिए निर्देशिका के मूल में निम्नलिखित कमांड चलाएँ:

find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;

समापन घुंघराले ब्रैकेट और बैक स्लैश के बीच की जगह के बारे में पता होना


खोज: `

किसी भी विचार क्यों यह आदेश मुझे "खोजने के लिए:` -exec 'के लिए लापता तर्क "कहते हैं? धन्यवाद।

समापन घुंघराले ब्रैकेट और\;
poussma

2

मुझे यह समाधान मिला जो मेरे लिए काम करता है। फ़ोल्डर और सबफ़ोल्डर के लिए:

chmod -R 777 */

और सभी फ़ाइलों के लिए (फ़ोल्डर और सबफ़ोल्डर में भी):

find . -type f -name "*" | xargs chmod 644

सभी टिप्पणियों का स्वागत है अगर यह करने का एक अच्छा तरीका नहीं है। मैंने अभी-अभी लिनक्स सीखना शुरू किया है।

निम्नलिखित टिप्पणियों में, एक अधिक मजबूत समाधान जो विशेष पात्रों को अच्छी तरह से संभालता है:

find . -type f -print0 | xargs -0 chmod 644  # For files
find . -type d -print0 | xargs -0 chmod 755  # For directories

लेकिन दूसरी कमांड मुझे कई फाइलों पर यह आउटपुट देती है: chmod: the': No such file or directory chmod: cannot access Logo.txt का उपयोग नहीं कर सकता है ': ऐसी कोई फ़ाइल या निर्देशिका chmod:' ./blog/wp-content/themes/OneRoom/LOO ': तक नहीं पहुंच सकता di

2
777खतरनाक है और केवल सिस्टम के बहुत छोटे अल्पसंख्यक पर लागू होता है।
30:12

2
अपने दूसरे आदेश में सुधार करने के लिए, find . -type f -print0 | xargs -0 chmod 644। यह -name "*"आवश्यक नहीं है, और जब तक आप ASCII वर्ण पर फ़ाइल नाम नहीं दिखाते हैं , जो फ़ाइल नाम में प्रदर्शित नहीं हो सकता है - जब तक आप उपयोग नहीं करते हैं, तब तक रिक्त स्थान या न्यूलाइन्सxargs(1) पर फ़ाइल नाम पार्स नहीं करेंगे । इसके लिए यह इनपुट के लिए उपयुक्त मोड में अपने आउटपुट को प्रारूपित करने के लिए कहता है । -0NUL-print0find(1)xargs -0
30:12

2

यदि आप पूँजी X का उपयोग करते हैं, तो आप इसका उपयोग chmodकेवल निर्देशिकाओं पर निष्पादन अनुमतियाँ सेट करने के लिए कर सकते हैं। अर्थात

chmod -R ugo+X .

0

खोजो। -Type f -exec chmod 644 {} \;


2
सुपरयुसर में आपका स्वागत है, कृपया सलाह दें कि 1 पंक्ति के उत्तर शायद ही कभी स्वीकार किए जाते हैं, क्या आप अपने जवाब पर अधिक विस्तार से बता सकते हैं?
50-3
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.