फ़ाइलों के स्वामी को पुनरावर्ती रूप से बदलें, लेकिन निर्देशिकाओं को नहीं


14

मेरे पास एक निर्देशिका है जिसमें ~ 50k निर्देशिका और ~ 1m फाइलें हैं।

मैं सभी फ़ाइलों के स्वामी (या अनुमति) को बदलना चाहता हूं, लेकिन निर्देशिकाओं को नहीं। इसका कारण यह है कि मैं एक दूरस्थ सर्वर से SCP अतिरिक्त फ़ाइलों की कोशिश कर रहा हूं, (~ 150k निर्देशिका और ~ 3.6m फाइलें)।

मेरे पास जो निर्देशिका है वह दूरस्थ निर्देशिका का एक हिस्सा है, लेकिन scp विफल ...

अगर मैं फिर से एससीपी चलाता हूं, तो यह उन फाइलों को अधिलेखित करके शुरू कर देगा जिन्हें मैंने पहले से ही दूरस्थ निर्देशिका से कॉपी किया था।

जवाबों:


20

आप उपयोग कर सकते हैं find, इसका एक और फायदा है कि ARG_MAXइस प्रक्रिया में इच्छा को ट्रिगर नहीं किया जाएगा। मूल निर्देशिका से:

find . -type f -exec chown newowner {} +

के लिए chmod:

find . -type f -exec chmod 644 {} +

-type fहोगा findकेवल फ़ाइलें।


1
वास्तव में महान काम करता है! धन्यवाद! Chmod और chown दोनों के लिए +1
मार्कस ब्रूनस्टोन

2
तो findट्रिगर नहीं करता है ARG_MAX? मैंने हमेशा सोचा था कि यह होगा। आप हमेशा कुछ सीखते हैं :)
kos

5

एक अन्य विकल्प का उपयोग करना है xargs। आप का उपयोग करना होगा -print0साथ विकल्प findऔर एक इसी -0का विकल्प xargs:

find . -type f -print0 | xargs -0 chown newuser:newgroup

से man find:

-print0

मानक आउटपुट पर पूर्ण फ़ाइल नाम प्रिंट करें, उसके बाद एक अशक्त वर्ण । यह उन फ़ाइल नामों को अनुमति देता है जिनमें नएलाइन या अन्य प्रकार के श्वेत स्थान होते हैं जिन्हें प्रोग्राम द्वारा खोजे जाने वाले आउटपुट द्वारा सही ढंग से व्याख्या की जाती है। यह विकल्प xargs के -0 विकल्प से मेल खाता है।

xargsसही ढंग से संभाल भी लेंगे ARG_MAX


2
find..execअजीब फ़ाइल नामों को संभालता है..क्या आपको लगता है कि यह नहीं करता है?
heemayl

1
@heemayl मैंने कुछ परीक्षण चलाए और ऐसा लगता है कि आप सही हैं। मुझे सही साबित होना है। इसे इंगित करने के लिए धन्यवाद, मैंने अपना उत्तर अपडेट कर दिया।
एपी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.