ফাইলগুলি (ডিরেক্টরি নয়) থেকে পুনরুদ্ধারযোগ্যভাবে নির্বাহযোগ্য বিট কীভাবে সরিয়ে ফেলা যায়


73

আমি যখন আমার ম্যাক বা উবুন্টু মেশিনে একটি ইউএসবি স্টিক (ফ্যাট) প্লাগ ইন করি তখন সমস্ত ফাইলের এক্সিকিউটেবল বিট সেট থাকে। আমার হার্ড ডিস্কে ডিরেক্টরি কাঠামোটি অনুলিপি করার পরে আমি কীভাবে এক্সিকিউটেবল বিটগুলি কেবল ফাইলগুলি থেকে পুনরাবৃত্তভাবে মুছে ফেলি এবং ডিরেক্টরিগুলিতে রাখি?


উত্তর:


132

জিএনইউ chmod(উবুন্টুতে) এর সাথে একক কমান্ড বৈকল্পিক (বর্তমান ডিরেক্টরিতে শুরু):

chmod -R -x+X .

ব্যাখ্যা:

  • -R - পুনরাবৃত্তভাবে কাজ
  • -x - সমস্ত ব্যবহারকারীর জন্য নির্বাহযোগ্য পতাকা সরান
  • +X - এটি যদি ডিরেক্টরি হয় তবে সমস্ত ব্যবহারকারীর জন্য নির্বাহযোগ্য পতাকা নির্ধারণ করুন

এই ক্ষেত্রে Xমূলধনাই কেবল ডিরেক্টরিগুলিতে প্রয়োগ হয় কারণ সমস্ত নির্বাহযোগ্য পতাকা দ্বারা সাফ করা হয়েছিল -x। অন্যথায় +X, পতাকাটি মূলত ব্যবহারকারী, গোষ্ঠী বা অন্য কারও জন্য সেট করা থাকলে নির্বাহযোগ্য পতাকাও সেট করে।

বিএসডি সহ chmod(যা ম্যাক ওএস এক্সে উপস্থিত রয়েছে) আপনাকে দুটি কমান্ডে আলাদাভাবে এটি করতে হবে:

sudo chmod -R -x * && sudo chmod -R +X *

(আপনি যদি মূল ডিরেক্টরিতেও লুকানো ফাইলগুলি অন্তর্ভুক্ত করতে চান তবে আপনার সম্ভবত * তে পরিবর্তন করতে হবে (পয়েন্ট), তবে এটি অনির্ধারিত))


উবুন্টু ১৩.০৪-তে একটি ছোটখাটো ঝাঁকুনি প্রয়োজন:chmod -R a-x+X *
ইয়েরো অ্যালটনেন

@ ইরো অ্যালটনেন: নোটটির জন্য আপনাকে ধন্যবাদ। আপনার যদি সবার জন্য অনুমতি umaskনা দেয় তবে এটি ঘটতে পারে x। আপনি ডিফল্ট ব্যবহার করেন umaskবা আপনি এটি পরিবর্তন করেছেন? আপনি দয়া করে umaskকমান্ড আউটপুট প্রেরণ করতে পারেন ? আপনার সমাধানের পাশাপাশি এই সম্ভাবনাও রয়েছে: chmod -R a-x,+X *যা xআপনার অনুযায়ী অনুমতি নির্ধারণ করবে umask। আমি উত্তরটি আপডেট করব তবে আমি প্রথমে বিএসডি / ম্যাক ওএস এক্সে আচরণটি পরীক্ষা করতে চাই।
পাবউক

@ পাবউক উফসী! এটি আসলে সেন্টো বক্স ছিল যেখানে আমি আমার উমাস্কটি 0007 এ রেখেছি
ইরো অ্যালটনেন

এটি কেবল দুঃখজনক ... :( findওয়ান থিং ভাল করার মতো সাধারণ সরঞ্জামগুলির সংমিশ্রণের স্টাইলের জন্য নীচের উত্তরে আমি বৈকল্পিক পছন্দ করি
মাইকেজটার

2
আপনি যদি এই ফাইলটি সমস্ত ফাইলে প্রয়োগ করতে চান তবে .তার পরিবর্তে ব্যবহার করুন*
জন ম্যাগনোলিয়া

46

আপনি যদি প্রথমে সঠিক পথে সিডি করেন:

find . -type f -exec chmod -x {} \;

অথবা

chmod -x $(find . -type f)

অনুসন্ধানে পথের মধ্যে 'f' (যার অর্থ নিয়মিত ফাইল) এর সমস্ত ফাইল পাওয়া যায়। এবং তারপরে প্রতিটি ফাইলে chmod -x কল করে। Name the ফাইলের নাম এবং \ এর পরিবর্তে প্রতিস্থাপিত হয়; chmod কমান্ডটি সমাপ্ত করে।


6
যদি আপনার findসমর্থন এটা ব্যবহার -exec ... \+পরিবর্তে -exec ... \;- এটা তার চেয়ে কম প্রয়োজন করব fork+ + execগুলি। যদি তা না হয় তবে ব্যবহার করুন find ... -print0 | xargs -0 ...
প্রথম

5
আমি এই কৌশলটি ব্যবহার করেছি, তবে "স্পার্ম +111" দিয়ে এটি অনুসন্ধানে যুক্ত হয়েছে যাতে এটি কেবল chmod এর এক্স-বিট সেট রয়েছে:find . -type f -perm +111 -exec chmod -x {} \;
ক্রিশ

4
পাবুকের সমাধানের চেয়ে এটি আরও ভাল হওয়ার কারণটি হ'ল এই কমান্ডটি ডিরেক্টরিগুলি একা ফেলে দেয়, যখন পাবুকের সমস্ত ডিরেক্টরিতে এক্সিকিউটেবল বিটটি পুনরায় সেট করে। কিছু ডিরেক্টরি থাকতে পারে যা এক্সিকিউটেবল বিট সেট না করে থাকে এবং পাবুকের কমান্ড সেট করে থাকে, আবার কেউ সেগুলি যেমন রয়েছে তেমন রেখে দিতে চায়।
মারিউস ম্যাটুটিয়ায়

২ য় পন্থা ফাঁকা স্থানগুলির জন্য ব্যর্থ হবে।
MestreLion

@ ফেমিয়েন্ট: যদি আপনার findসমর্থন হয় তবে -print0আমি নিশ্চিত যে এটিও সমর্থন করবে-exec
MestreLion

3

টার্মিনাল উইন্ডোতে লিনাক্স এবং ইউনিক্সের অধীনে বা ম্যাক ওএস এক্সে, টার্মিনাল.এপ এ এটি ব্যবহার করুন:

find . -type f -print0 | xargs -0 chmod -x


আপনি এই কমান্ড লাইন মনে করতে পারেন? পারছি না।
মাইক এল।

এই উত্তর কেন কার্যকর তা দেখার জন্য ম্যাথিজের উত্তরের নীচে মন্তব্যটির মন্তব্য দেখুন।
প্যাট্রিকটি

2

chmod -x+Xপথ পারেন উবুন্টু আমাকে জন্য কাজ না করে, এইভাবে আমি এই সংক্ষিপ্ত পাইথন স্ক্রিপ্ট লিখেছিলেন:

#!/usr/bin/python3
import os
for par, dirs, files in os.walk('.'):
    for d in dirs:
        os.chmod(par + '/' + d, 0o755)
    for f in files:
        os.chmod(par + '/' + f, 0o644)

আপনার ফাইল সিস্টেমে যদি সকেটের মতো কোনও অভিনব অতিরিক্ত জিনিস থাকতে পারে, আপনি চেষ্টা / ক্যাচ দিয়ে শেষ চিমডকে ঘিরে রাখতে চাইতে পারেন।

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