ডিরেক্টরিগুলির স্ট্রিংয়ে অনুমতি পরিবর্তন করুন


-1

আমার ডিরেক্টরিগুলির একটি স্ট্রিং রয়েছে এবং আমি chmod এর মতো কমান্ড সহ এই ডিরেক্টরিগুলির সমস্তটির অনুমতি 775 (rwxrwxr-x) এ পরিবর্তন করতে চাই।

সমস্যাটি হ'ল স্ট্রিংটি সম্পাদনযোগ্য তাই এটি ব্যবহারকারীর থেকে পৃথক পৃথক হতে পারে, তাই chmod -R কাজ করে না কারণ একটি ব্যবহারকারীর থাকতে পারে

/apple/a/b 

অন্য একজন ব্যবহারকারী আছে

/android/a/b/c/d

সাহায্যের জন্য ধন্যবাদ :)


এই ডিরেক্টরিগুলি সমস্ত ব্যবহারকারীর জন্য পৃথক হবে বলে কি এই ডিরেক্টরিগুলি গণনার মানদণ্ড রয়েছে? আপনি যদি একটি ফাইন্ড কমান্ড দিয়ে এগুলি গণনা করতে পারেন তবে এটি করা বেশ সহজ হবে। যদি পরিবর্তন এলোমেলো হয়ে থাকে এবং তাদের সবগুলিকে প্রোগ্রামক্রমে তালিকাভুক্ত করার কোনও উপায় না থাকে তবে আপনাকে টর্ডনের পরামর্শ ব্যবহার করে প্রতি ব্যবহারকারী ভিত্তিতে এটি করতে হবে। এছাড়াও, দয়া করে নোট করুন যে এটি কেবল ফোল্ডারটি বা এর পাশাপাশি সমস্ত ফাইলগুলিকেও প্রভাবিত করছে।
ম্যাক্লিওড

এমন কিছু আছে যা আপনি জানেন? মানে কি সমস্ত ব্যবহারকারীর জন্য একই? না a/b/cপরিবর্তন? দয়া করে আমাদের একটি প্রকৃত উদাহরণ দিন এবং স্ট্রিংয়ের কোন অংশগুলি সর্বদা একই থাকে তা নির্দিষ্ট করুন।
টেরডন

হ্যাঁ এ / খ / সি পরিবর্তন হয়।
গিমবার্গসন

সুতরাং, যদি স্ট্রিং /a/b/c/d, আপনি অনুমতি পরিবর্তন করতে চান /a, /a/b, /a/b/cএবং /a/b/c/d?
ডেনিস

1
আমাকে এই সোজা পেতে দাও, আপনি স্বয়ংক্রিয়ভাবে ডিরেক্টরিগুলির (তাদের ফাইলগুলিকে প্রভাবিত না করে) একটি স্বেচ্ছাসেবীর সেটগুলির অনুমতিগুলি পরিবর্তন করতে সক্ষম হতে চান? অনুমানক কমান্ড কীভাবে জানবে যে ডিরেক্টরিগুলি পরিবর্তন করতে হবে? আপনি কি প্রতিবার আলাদা স্ট্রিং দিবেন? দয়া করে কয়েকটি সুনির্দিষ্ট উদাহরণ পোস্ট করুন যাতে আমরা বুঝতে পারি যে আপনি কী করার চেষ্টা করছেন।
টেরডন

উত্তর:


1

পরিবর্তনশীল যদি স্ট্রিং পথ রয়েছে /a/b/c/d, নিম্নলিখিত নির্দেশাবলীর অনুমতি পরিবর্তন করতে হবে /a, /a/b, /a/b/cএবং /a/b/c/d:

(
    IFS=/
    unset substring

    for dir in $string; do
        unset IFS
        substring="$substring$dir/"
        test "$substring" != "/" && chmod 755 "$substring"
    done
)

কিভাবে এটা কাজ করে

  • প্রথম বন্ধনী একটি subshell সবকিছু চালানো, তাই ভেরিয়েবল পরিবর্তন IFS এবং সাবস্ট্রিং subshell বাহিরে কোনো প্রভাব থাকবে না।

  • IFS=/অভ্যন্তরীণ ফাইল বিভাজককে স্ল্যাশে সেট করে , সুতরাং লুপের জন্য $stringস্ল্যাশে বিভক্ত হবে ।

  • for dir in $string; do ... done...প্রতিটি উপাদানগুলির জন্য একবার কার্যকর করা হবে $string

    আমাদের উদাহরণে, $dirমান নিতে হবে , a, b, cএবং d

  • unset IFS অভ্যন্তরীণ ফাইল বিভাজকটিকে ডিফল্টরূপে পরিবর্তন করে, কারণ এটি ডিরেক্টরি পথগুলিতে স্ল্যাশগুলিকে প্রভাবিত করে affect

  • substring="$substring$dir/"বর্তমান মূল্য appends $dirকরতে $substring

    আমাদের উদাহরণে, $susbtringমান নিতে হবে /, /a/, /a/b/, /a/b/c/এবং /a/b/c/d/

  • test "$substring" != "/" && chmod 755 "$substring"বর্তমান মানটি $susbtringপৃথক কিনা তা পরীক্ষা করে /

    যদি এটি হয় তবে এটি পছন্দসই অনুমতি নির্ধারণ করে।


খুব সুন্দর, +1। বিশেষত উক্তি ব্যবহারের জন্য তাই এটি দীর নামগুলির সাথে কাজ করে যা স্পেস রয়েছে।
টেরডন

0

আপনার প্রশ্ন খুব পরিষ্কার নয়। এই ডিরেক্টরিগুলি একে অপরের উপ-ডিরেক্টরি? যাইহোক, এখানে কিছু পছন্দ রয়েছে:

  1. Dir1 এবং এর সমস্ত উপ-ডিরেক্টরি এবং ফাইলগুলিতে অনুমতি পরিবর্তন করুন

    chmod -R 775 dir1
    
  2. Dir1 এবং নির্দিষ্ট সাব-ডিরেক্টরিতে অনুমতি পরিবর্তন করুন

    chmod  775 dir1 dir1/dir2 /dir1/dir2/dir3
    
  3. Dir1 এর সমস্ত উপ-ডিরেক্টরিতে অনুমতি পরিবর্তন করুন

    find dir1 -type d -exec chmod 775 {}\;
    

আমার মনে হয় আপনার chmod -Rফাইলগুলিতেও পার্মেস পরিবর্তন হবে? আমি মনে করি `Find -type d -exec chmod 775 {} \; ' বা সমতুল্য হ'ল আপনি যা চান
ধনী হোমোলকা

এটি কাজ করে না কারণ আপনাকে প্রথম ডিরেক্টরিটি জানতে হবে এবং এটি যে কোনও কিছু হতে পারে।
গিমবার্গসন

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