পুনরাবৃত্তির সাথে ফাইলের অনুমতি পরিবর্তন করে তবে ডিরেক্টরি নয়?


13

আমি এমন কিছু ফাইলের অনুমতিগুলির ব্যাপক পুনরাবৃত্তির পরিবর্তন করছিলাম যা আমি ইউনিক্স সিস্টেমে স্থানান্তরিত করেছি। আমি সেগুলিকে ug + rw এ পরিবর্তন করেছি, তবে তখন আমি দেখতে পেলাম যে আমি উপ-ডিরেক্টরিগুলি পেরিয়ে যেতে পারছি না। আমি ম্যান পৃষ্ঠার দিকে তাকিয়েছিলাম chmodএবং ডিরেক্টরিগুলি বাদ দেওয়ার জন্য কোনও ব্যাখ্যা দেখতে পাইনি, তাই আমি কিছুটা গুগল করে দেখতে পেলাম যে লোকেরা findডিরেক্টরিতে ডিরেক্টরিগুলি অনুমতি এবং ব্যবহারকারী এবং গোষ্ঠীর জন্য 'এক্সিকিউট' করার জন্য পুনরাবৃত্তভাবে পরিবর্তন করত। আমি এটি করেছিলাম এবং তারপরে আমি সেগুলিতে সন্ধান করতে পারি।

তবে এটি আমার কাছে মনে হয়েছিল যে আমি এই chmodসন্ধানটি করতে সক্ষম হব - পুনরাবৃত্তভাবে ফাইলগুলি পড়তে / লিখতে পরিবর্তন করতে কিন্তু ডিরেক্টরিগুলি অবিশ্বাস্য করে তোল না। আমি কি এটি 'সঠিক' উপায়ে করেছি বা এটি করার সহজ উপায় আছে?

উত্তর:


12

আরও ভাল সমাধান হওয়া উচিত

chmod -R ug=rwX,o=rX /path

যেখানে মূলধনের Xঅর্থ: নির্বাহ বিট সেট করুন

ফাইলটি একটি ডিরেক্টরি বা ইতিমধ্যে কিছু ব্যবহারকারীর জন্য অনুমতি কার্যকর করেছে

( chmodম্যান পৃষ্ঠা থেকে উদ্ধৃত )।

বা এছাড়াও, আপনি যদি ব্যবহার করতে চান find

find /path \( -type f -exec chmod ug=rw,o=r   {} + \) -o \
           \( -type d -exec chmod ug=rwx,o=rx {} + \)

আমি আমার ইউএসবি হার্ড ড্রাইভের জন্য এই কমান্ডের প্রত্যেকটির জন্য প্রশস্ত ওপেন ব্যবহার করেছি: chmod -v -R ugo = rwX / পাথ ধন্যবাদ!
ডুড

স্পষ্টরূপে সেখানে ব্যবহার না করেই কোন উপায় নেই find(আমি এই বিষয়ের উপর আমার googlings মাধ্যমে এখানে আগত।) 700 600 সব ফাইল অনুমতি এবং সমস্ত ডিরেক্টরির অনুমতি সেট যে যদি পারেন একটি একক সঙ্গে সম্পন্ন করা chmod -Rকমান্ড, আমাকে সংশোধন করুন মুক্ত মনে।
ওয়াইল্ডকার্ড

@ উইল্ডকার্ড: ঠিক নয়, কমান্ডটি chmod -R u=rwX,go= /pathআপনি যা চান তার প্রায়শই কাজ করে: এটি কার্যকরভাবে আগেই নির্ধারণ করা হয়েছে কিনা তার উপর নির্ভর করে সমস্ত ডায়ার 700 এবং সমস্ত ফাইল 600 বা 700 এ সেট করে এবং আমি মনে করি এটি করা সঠিক জিনিস is ।
এনজোটিব

1
@ এঞ্জোটিব, হ্যাঁ - প্রায়, তবে বেশ নয়। আমার ক্ষেত্রে আমি স্ক্রিপ্ট বা বাইনারি বা যাই হোক না কেন নির্বিশেষে সমস্ত ফাইলের (তবে অবশ্যই ডিরেক্টরি নয়) সমস্ত ক্ষেত্রে এক্সিকিউশন বিটটি অক্ষম করতে চাই । সুতরাং findআপনার লেখা আদেশটি একটি টেম্পলেট হিসাবে খুব সহায়ক ছিল। :)
ওয়াইল্ডকার্ড

@ উইল্ডকার্ড প্রথমে এক্সিকিউট বিট অপসারণ সম্পর্কে, পুনরাবৃত্তভাবে, তারপরে এটি কেবল উপরের কমান্ডটি ব্যবহার করে কেবল ডিরেক্টরিতে যুক্ত করুন?
মাইকেল 18

3

সন্ধানটি ব্যবহার করা হ'ল 'সঠিক' উপায় এবং একমাত্র প্রোগ্রামিক উপায়, যদিও বিভিন্নতা রয়েছে:

find . -type f -exec chmod ug+rw {} +  # "+" may not be on all systems

অথবা

find . -type f -print0 | xargs -r0 chmod ug+rw  # similar to the -exec + functionality

বা সবচেয়ে ধীর:

find . -type f -exec chmod ug+rw {} \;  # in case xargs is not installed

এগুলির প্রত্যেকটি একটি ফাইল নির্বাচন করে (ডিরেক্টরি নয়, সিমলিংক নয়) এবং এতে chmodআদেশটি প্রয়োগ করে । প্রথম দুটি কলটি সংখ্যা হ্রাস করে chmodপ্রতিবার একটি অভ্যন্তরীণ কমান্ড লাইনের শেষে ফাইল সংযুক্ত করে যতক্ষণ না সর্বাধিক (প্রায়শই 10) পৌঁছে যায়, তারপরে কমান্ডটি কল করে এবং নতুন আদেশটি পুনর্নির্মাণ শুরু করে। সর্বশেষ বিবৃতিটি প্রতিটি ফাইলের জন্য একটি নতুন প্রক্রিয়া তৈরি করে, তাই এটি কম দক্ষ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.