পুনরায় পুনরাবৃত্তি


249

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

আমি এই থ্রেডটিতে দেখেছি: চিমড: কীভাবে পুনরুক্তরূপে কেবলমাত্র এমন ফাইলগুলিতে এক্সিকিউট করার অনুমতি যুক্ত করা যায় যা ইতিমধ্যে অন্যদের মতো এক্সিকিউট করার অনুমতি পেয়েছে , তবে আনন্দ নেই।

ডিরেক্টরিগুলি মূলত একাধিক তবে সমস্ত ভুল পতাকা নিয়ে আসে, সেগুলি প্রদর্শিত হতে পারে:

drwx------
d---r-x---
drwxrwxr-x
dr--r-xr--

এগুলি আমি এখনও অবধি আবিষ্কার করেছি, তবে এর চেয়ে আরও বেশি কিছু হতে পারে।

findকোনও xঅনুমতি ছাড়াই ডিরেক্টরিতে সন্ধান করার চেষ্টা করার সময় ত্রুটিগুলি এবং তাই এটি এতে পাস করে না chmod। আমি এখন পর্যন্ত যা করছি, তা হ'ল মাতৃভাষা ডিরেক্টরিতে অনুমতিগুলি পরিবর্তন করতে হবে, তারপরে শিশু ডিরেক্টরিতে যান এবং তাদের জন্য একই কাজ করুন ইত্যাদি। তবে এটি অনেকটা শ্রমশক্তি। এটি স্বয়ংক্রিয়ভাবে করার কোনও উপায় নেই?

আমি এখন এটি কীভাবে করছি:

একটি করুন:

$ chmod -R +x
$ chmod -R +r

যতক্ষণ না আমি ত্রুটি না পেয়েছি

$ find -type f -exec chmod -x {} +

তবে আরও ভাল উপায় থাকতে হবে।


3
-আর এর মতো নয়
পিজে ব্রুনেট

বিবিধ দ্রষ্টব্য, আপনি যদি বলতে চান যে সমস্ত গোষ্ঠীর অনুমতিগুলি মালিকের অনুমতিগুলির সাথে মেলে (আইএমওতে সমস্ত কিছু কমিয়ে আনার সম্ভাবনা কম থাকে) তবে এটি সার্ভারফল্ট
২৮৪78///

উত্তর:


131

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

find . -type d -exec chmod +rx {} \;

2
পার্থক্য কি '\;' এবং '+' কমান্ডের শেষে ওপি দ্বারা ব্যবহৃত হয়েছিল?
কন সাইক

1
@ কনপসিচ দৃশ্যত +কমান্ড-লাইনটি অন্যরকমভাবে তৈরি করেছেন। আমি আসলে এটি সম্পর্কে সচেতন ছিলাম না; \;অনুসন্ধানের সাথে মেলে এমন প্রতিটি ফাইল প্রতি কমান্ডের সাহায্যে হ'ল স্বাভাবিক উপায়।
ফ্রেড ফু

যদি কিছু ফাইলের নামে ফাঁকা স্থান থাকে তবে কাজ করে না
সূত্রের

3
@ সুনটস এর "{}"পরিবর্তে {}এটি ঠিক করা উচিত।
ব্যবহারকারী4642212

আমি এটি উইন্ডোজ 10 এ লিনাক্স সাবসিস্টেমের অধীনে চালিত করেছি এবং এর বিপরীত প্রভাব রয়েছে। বেশিরভাগ ফাইলের অনুমতি সরানো হয়েছে।
সর্বাধিক Candocia

176

আপনি Xকেবলমাত্র ডিরেক্টরিতে এক্সিকিউটেবল পতাকা সেট করতে মোড লেটার (মূলধন এক্স) দিয়ে chmod ব্যবহার করতে পারেন ।

নীচের উদাহরণে এক্সিকিউটেবল পতাকা সাফ হয়ে যায় এবং তারপরে সমস্ত ডিরেক্টরিগুলির জন্য পুনরাবৃত্তভাবে সেট করা হয়:

~$ mkdir foo
~$ mkdir foo/bar
~$ mkdir foo/baz
~$ touch foo/x
~$ touch foo/y

~$ chmod -R go-X foo 
~$ ls -l foo
total 8
drwxrw-r-- 2 wq wq 4096 Nov 14 15:31 bar
drwxrw-r-- 2 wq wq 4096 Nov 14 15:31 baz
-rw-rw-r-- 1 wq wq    0 Nov 14 15:31 x
-rw-rw-r-- 1 wq wq    0 Nov 14 15:31 y

~$ chmod -R go+X foo 
~$ ls -l foo
total 8
drwxrwxr-x 2 wq wq 4096 Nov 14 15:31 bar
drwxrwxr-x 2 wq wq 4096 Nov 14 15:31 baz
-rw-rw-r-- 1 wq wq    0 Nov 14 15:31 x
-rw-rw-r-- 1 wq wq    0 Nov 14 15:31 y

কিছুটা ব্যাখ্যা:

  • chmod -x foo- এর জন্য নির্ধারিত পতাকা সাফ করুনfoo
  • chmod +x foo- সেট এক্সিকিউটেবল জন্য তা পতাকাঙ্কিতfoo
  • chmod go+x foo- উপরের মত একই, তবে কেবল গ্রুপ এবং অন্যান্য ব্যবহারকারীদের জন্য পতাকা সেট করুন , ব্যবহারকারীর (মালিক) অনুমতিটি স্পর্শ করবেন না
  • chmod go+X foo - উপরের মত একই, তবে কেবল ডিরেক্টরিতে প্রয়োগ করুন, ফাইলগুলিতে স্পর্শ করবেন না
  • chmod -R go+X foo- উপরের মত একই, তবে এর সমস্ত উপ-ডিরেক্টরিতে এটি পুনরাবৃত্তভাবে করুনfoo

80

একই সাথে সমস্ত বিস্ময় পরিবর্তন করার চেষ্টা করুন:

chmod -R +xr

এটি সমস্ত নন-ডিরেক্টরিতেও চালানোর অনুমতিগুলি রাখবে।
ফ্রেড ফু

1
হ্যাঁ. এটি কেবল প্রথম পুনরাবৃত্ত পদক্ষেপটি প্রতিস্থাপন করে। আপনি এখনও find -type f -exec chmod -x {} +পরে চালাতে হবে ।
চোরোবা

50

সমস্ত কিছু মালিকের দ্বারা লিখিতযোগ্য করার জন্য, গোষ্ঠীর দ্বারা পড়া / সম্পাদন এবং বিশ্বকে কার্যকর করা:

chmod -R 0755

সবকিছুকে প্রশস্ত করে তোলার জন্য:

chmod -R 0777

12
বর্তমান ফোল্ডারের অবস্থান যুক্ত করুন:chmod -R 0777 .
ডানিজেল

18

এক্সটেনশন সহ বর্তমান ফোল্ডারের মধ্যে সমস্ত ফাইলগুলিতে (ফোল্ডার নয়) পুনরাবৃত্তভাবে এক্সিকিউটেবল অনুমতি যুক্ত করা sh:

find . -name '*.sh' -type f | xargs chmod +x

* পাইপটি লক্ষ্য করুন ( |)


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