ফাইন্ড কমান্ড ব্যবহার করে সম্পাদনযোগ্য ফাইলগুলি অনুসন্ধান করুন


113

আমি ইউনিক্স findকমান্ডের সাথে কী ধরনের প্যারামিটার / পতাকা ব্যবহার করতে পারি যাতে আমি এক্সিকিউটেবলগুলিকে অনুসন্ধান করতে পারি?


টাইপ করুন 'মানুষ খুঁজে'। আমি মনে করি যে '-এক্সিকিউটেবল' আপনি চান বিকল্প।
sje397

3
find -executable... তবে এটি গ্যারান্টি দেয় না যে তালিকাভুক্ত প্রতিটি ফাইল প্রকৃতপক্ষে কার্যকর হবে
উইলিয়াম

1
সমস্ত বাস্তবায়ন findসমান তৈরি হয় না। @ Sje397 এবং @ উইলিয়াম দ্বারা প্রস্তাবিত বিকল্পটি উপলভ্য নয়। নীচে প্রদর্শিত গৃহীত সমাধানটি ব্যবহার করা আরও ভাল ।
LS


নীচে প্রদর্শিত সমস্ত প্রস্তাবগুলি অপছন্দ করে যা ফাইল অনুমতিগুলির উপর ভিত্তি করে। যুক্তি: আমার GNU অপারেটিং সিস্টেমের জন্য (উবুন্টু) উদাহরণস্বরূপ ASCII পাঠ্য ফাইলের জন্য "x" (এক্সিকিউটেবল) পতাকা সেট করা সম্ভব। কোনও মিমিক্স এই অপারেশনটিকে সফলভাবে শেষ হতে বাধা দেয় না। এক্স ফ্ল্যাগ নির্ধারিত করার জন্য একাধিক অ-উদ্দেশ্যযুক্ত ফাইলগুলির জন্য এটি কেবলমাত্র ছোট্ট ভুল / বাগের প্রয়োজন। অতএব gniourf_gniourf 'সমাধানগুলি আমার ব্যক্তিগত প্রিয়। তবে ক্রস-সংকলিত এক্সিকিউটেবলের জন্য একটি এমুলেটর বা টার্গেট ডিভাইস প্রয়োজন এমন ত্রুটি রয়েছে।
Na13-সি

উত্তর:


173

জিএনইউ সংস্করণে আপনি ব্যবহার করতে পারেন এটির সন্ধান করুন -executable:

find . -type f -executable -print

বিএসডি সংস্করণগুলির সন্ধানের জন্য, আপনি একটি অষ্টাল মাস্ক -permসহ +এবং ব্যবহার করতে পারেন :

find . -type f -perm +111 -print

এই প্রসঙ্গে "+" এর অর্থ "এই বিটগুলির মধ্যে কোনওটি সেট করা আছে" এবং 111 হ'ল এক্সিকিউট বিট।

নোট করুন যে -executableএটি জিএনইউ অনুসন্ধানের প্রাকটিকের অনুরূপ নয় । বিশেষত, -executableপরীক্ষাগুলি যে ফাইলটি বর্তমান ব্যবহারকারী দ্বারা সম্পাদন করা যেতে পারে, যখন -perm +111কোনও পরীক্ষার অনুমতি নির্ধারিত হয় কেবল তা পরীক্ষা করে।

জিএনইউর পুরানো সংস্করণগুলি -perm +111সিনট্যাক্সকে সমর্থন করে তবে 4.5.52 হিসাবে এই বাক্য গঠনটি আর সমর্থিত নয়। পরিবর্তে, আপনি -perm /111এই আচরণ পেতে ব্যবহার করতে পারেন ।


find: invalid mode ‘+111’4.5.11 4.fc20 সন্ধানকারীগুলিতে ত্রুটি ।
সোর্সজেডি

1
@ সোর্সজেদি ধন্যবাদ আমি আসলে কেবলমাত্র নন-জিএনইউ সংস্করণ (বিএসডি, বিশেষত) সম্পর্কে কথা বলছিলাম তবে জিএনইউর পুরানো সংস্করণগুলি আসলে সেই বাক্য গঠনটিকে সমর্থন করেছিল support নতুন সংস্করণগুলিতে আপনাকে এর /পরিবর্তে ব্যবহার করতে হবে +। আরও তথ্যের জন্য আপডেট উত্তর দেখুন।
লরেন্স গনসাল্ভেস

সত্যিই, আমি আপনার উত্তর ভুল লিখেছি। এটিকে আরও জটিল করার জন্য দুঃখিত:
সোর্সজেডি

তাহলে symlinks এক্সিকিউটেবল ফাইল আরও দেখা করা উচিত, অন্তর্ভুক্ত -Lবিকল্প: find -L ...
mklement0

এটা আমার একটা সময় "শুধু পরীক্ষার হলে গ্রহণ" -executable সম্পৃক্ত অভিন্ন নয় "প্রভাব বোঝা এবং কোন চালানো অনুমতি নির্ধারণ করা হয়": এর মানে -perm +111উত্পাদ পারে মিথ্যা positives , অর্থাত্, যে ফাইল বর্তমান ব্যবহারকারীর আসলে চালানো করতে পারবে না। সেখানে অনুকরণ করার কোন উপায় আছে -executableকারণ কি দরকার হয়, একা অনুমতি পরীক্ষার দ্বারা কহা ফাইলের ব্যবহারকারী এবং গ্রুপ পরিচয় বর্তমান ব্যবহারকারীর
mklement0

35

মৌলিক ভুল ধারণাটি পরিষ্কার করার জন্য @ gniourf_gniourf এ টুপিটির পরামর্শ ।

এই উত্তরটি বিদ্যমান উত্তরের একটি ওভারভিউ সরবরাহ করার এবং তাদের সূক্ষ্মতা এবং আপেক্ষিক গুণাবলী নিয়ে আলোচনা করার পাশাপাশি পটভূমির তথ্য সরবরাহ করার চেষ্টা করে , বিশেষত বহনযোগ্যতার ক্ষেত্রে

এক্সিকিউটেবল ফাইলগুলি সন্ধান করা দুটি স্বতন্ত্র ব্যবহারের ক্ষেত্রে উল্লেখ করতে পারে :

  • ব্যবহারকারীকেন্দ্রিক : বর্তমান ব্যবহারকারী দ্বারা কার্যকরযোগ্য ফাইলগুলি সন্ধান করুন
  • ফাইলকেন্দ্রিক : (এক বা একাধিক) এক্সিকিউটেবল অনুমতি বিট সেট করা ফাইলগুলি সন্ধান করুন ।

নোট করুন যে কোনও একটি দৃশ্যে এক্সিকিউটেবলের জন্য সিমলিংকগুলি সন্ধান করার জন্য কেবল এটির পরিবর্তে ব্যবহারfind -L ... করা বুদ্ধিমান হতে পারেfind ...

মনে রাখবেন যে সহজতম ফাইলকেন্দ্রিক কেস - সমস্ত তিনটি সুরক্ষা প্রিন্সিপাল (ব্যবহারকারী, গোষ্ঠী, অন্যান্য) এর জন্য নির্বাহযোগ্য অনুমতি বিট নির্ধারিত এক্সিকিউটেবলগুলির সন্ধান করা - সাধারণত হবে , তবে প্রয়োজনে ব্যবহারকারী-কেন্দ্রিক দৃশ্যের মতো একই ফল পাওয়া যাবে না - এবং এটি পার্থক্য বুঝতে গুরুত্বপূর্ণ।

ব্যবহারকারীকেন্দ্রিক ( -executable)

  • গৃহীত উত্তর commendably বিশেষ পরামর্শ দেওয়া হচ্ছে -executable, যদি গনুহ find পাওয়া যায়।

    • জিএনইউ findবেশিরভাগ লিনাক্সের ডিস্ট্রোস নিয়ে আসে
      • বিপরীতে, ম্যাকোস সহ বিএসডি-ভিত্তিক প্ল্যাটফর্মগুলি বিএসডি সন্ধানের সাথে আসে, যা কম শক্তিশালী।
    • দৃশ্যের দাবি অনুসারে, -executableকেবলমাত্র বর্তমান ব্যবহারকারী কার্যকর করতে পারে এমন ফাইলগুলির সাথে মেলে (প্রান্তের কেসগুলি রয়েছে [[1] )।
  • বাসদ find বিকল্প গৃহীত উত্তর (দ্বারা প্রদত্ত -perm +111) একটি উত্তর বিভিন্ন , ফাইল -centric প্রশ্ন (উত্তর নিজেই হিসাবে যুক্তরাষ্ট্র)।

    • শুধু ব্যবহার -permউত্তর দিতে ব্যবহারকারী -centric প্রশ্ন হল অসম্ভব কারণ কি প্রয়োজন হয় করা হয়, কহা ফাইলের ব্যবহারকারী এবং গ্রুপ পরিচয় বর্তমান ব্যবহারকারীর , যেহেতু -permশুধুমাত্র পরীক্ষা করতে পারেন ফাইলের অনুমতি।
      শুধুমাত্র পসিক্স findবৈশিষ্ট্য ব্যবহার করে , বাইরের ইউটিলিটিগুলি জড়িত না করে প্রশ্নের উত্তর দেওয়া যাবে না।
    • সুতরাং, সেরা -perm(নিজে) কি করতে পারেন একটি হল পড়তা এর -executableহয়তো একজন ঘনিষ্ঠ পড়তা চেয়ে -perm +111হয়-perm -111 এই ধর্মঘট টিপিক্যাল বাস্তব জগতের দৃশ্যকল্প আমাকে - তাই হিসাবে আছে সমস্ত নিরাপত্তা প্রিন্সিপাল (ব্যবহারকারী, গ্রুপ, অন্যান্য) জন্য এক্সিকিউটেবল বিট সেট ফাইল খুঁজে বের করা। বোনাস হিসাবে, এটি পসিক্স-কমপ্লায়েন্ট হতে পারে ( find -Lসিমলিংকগুলি অন্তর্ভুক্ত করতে ব্যবহার করুন , ব্যাখ্যাটির জন্য আরও নীচে দেখুন):

      find . -type f -perm -111  # or: find . -type f -perm -a=x
  • gniourf_gniourf এর উত্তর পারফরম্যান্স ব্যয় করে,ব্যবহার করে, এর-executable একটি সত্য, পোর্টেবল সমতুল্য সরবরাহ করে।-exec test -x {} \;

    • মিশ্রন -exec test -x {} \; সঙ্গে -perm +111(অর্থাত, ফাইল অন্তত একটি এক্সিকিউটেবল বিট সেট) কার্য সম্পাদন করে সাহায্য করতে পারে execপ্রয়োজন জন্য প্রার্থনা নাও করা যেতে যে ফাইল (নিম্নলিখিত বাসদ খুঁজে পেতে POSIX-অনুবর্তী সমতুল্য ব্যবহার -perm +111/ গনুহ খুঁজে -perm /111; ক্লিক করুন অধিকতর দেখতে একটি ব্যাখ্যা জন্য) :

      find . -type f \( -perm -u=x -o -perm -g=x -o -perm -o=x \) -exec test -x {} \; -print

ফাইলকেন্দ্রিক ( -perm)

  • করতে উত্তর ফাইল -centric প্রশ্ন , এটা হয় POSIX-অনুবর্তী ব্যবহার করতে যথেষ্ট -permপ্রাথমিক (ক নামে পরিচিত পরীক্ষা গনুহ খোঁজ পরিভাষা)।
    • -permআপনাকে কেবল কোনও এক্সিকিউটেবিলিটি নয়, কোনও ফাইলের অনুমতি পরীক্ষা করার অনুমতি দেয় ।
    • অনুমতিগুলি অষ্টাল বা প্রতীকী মোড হিসাবে নির্দিষ্ট করা হয় । অক্টাল মোডগুলি হ'ল অষ্ট সংখ্যা (যেমন, 111), যেখানে প্রতীকী মোডগুলি স্ট্রিং (যেমন, a=x)।
    • সিম্বলিক মোডগুলিu (ব্যবহারকারী), g(গোষ্ঠী) এবং o(অন্যান্য) হিসাবে সুরক্ষা প্রিন্সিপালগুলি সনাক্ত করে বা aতিনটিই উল্লেখ করে। অনুমতিসমূহ হিসাবে প্রকাশ করা হয় xউদাহরণস্বরূপ, এক্সিকিউটেবল জন্য, এবং অপারেটর ব্যবহার করে প্রিন্সিপাল নির্ধারিত =, +এবং -; অষ্টাল মোড সহchmod একটি সম্পূর্ণ আলোচনার জন্য, ইউটিলিটির জন্য পসিক্স স্পেস দেখুন
    • এর প্রসঙ্গে find:
      • -(উদাহরণস্বরূপ -ug=x) এর সাথে একটি মোডের উপসীকরণের অর্থ: ফাইলগুলি মেলানো যাতে সমস্ত অনুমতি নির্দিষ্ট থাকে (তবে মেলানো ফাইলগুলির অতিরিক্ত অনুমতি থাকতে পারে)।
      • রয়ে কোনো উপসর্গ নেই (যেমন 755এই আছে ম্যাচের ফাইলগুলি:) মানে পূর্ণ, সঠিক অনুমতি সেট।
      • কেভিয়েট : জিএনইউ এবং বিএসডি উভয়ই সুনির্দিষ্ট-অনুমোদিত-বিট-সেট যুক্তির সাথে যুক্ত একটি অতিরিক্ত, নন - স্ট্যান্ডার্ড উপসর্গটি প্রয়োগ করে , তবে এটি বেমানান বাক্য গঠন সহ করে :
        • বিএসডি সন্ধান: +
        • জিএনইউ সন্ধান করুন: / [২]
      • সুতরাং, আপনার কোডটি অবশ্যই পোর্টেবল হতে পারে তবে এই এক্সটেনশনগুলি এড়িয়ে চলুন
  • নীচের উদাহরণগুলি বিভিন্ন ফাইলকেন্দ্রিক প্রশ্নের বহনযোগ্য উত্তরগুলি প্রদর্শন করে।

ফাইল কেন্দ্রিক কমান্ড উদাহরণ

বিঃদ্রঃ:

  • নিম্নলিখিত উদাহরণগুলি পসিএক্স-কমপ্লায়েন্ট , যার অর্থ তারা জিএনইউ অনুসন্ধান এবং বিএসডি সন্ধান সহ যে কোনও পসিক্স-সামঞ্জস্যপূর্ণ প্রয়োগে কাজ করা উচিত; বিশেষত, এর প্রয়োজন:
    • নন-স্ট্যান্ডার্ড মোডের উপসর্গগুলি +বা ব্যবহার করা হচ্ছে না /
    • লজিকাল-অপারেটর প্রাইমারিগুলির POSIX ফর্মগুলি ব্যবহার করে :
      • ! না (জিএনইউ অনুসন্ধান এবং বিএসডি অনুসন্ধানের জন্যও অনুমতি দেয়) for -not ); নোট যা শেল ইতিহাসের বিস্তৃতি থেকে \!সুরক্ষার জন্য উদাহরণগুলিতে ব্যবহৃত হয়!
      • -aএবং এর জন্য (জিএনইউ অনুসন্ধান এবং বিএসডি সন্ধানের অনুমতি দেয় -and)
      • -oOR এর জন্য (জিএনইউ অনুসন্ধান এবং বিএসডি সন্ধানের অনুমতি দেয় -or)
  • উদাহরণ ব্যবহার প্রতীকী মোড , কারণ সেগুলি পড়া এবং মনে রাখা সহজ।
    • মোড উপসর্গের সাথে -, =এবং +অপারেটরগুলি আন্তঃবিন্যভাবে ব্যবহার করা যেতে পারে (উদাহরণস্বরূপ, -u=xসমান -u+x- আপনি যদি আবেদন না করেন)-x পরে কোনও অর্থ নেই)।
    • ,আংশিক মোডে যোগ দিতে ব্যবহার করুন ; এবং যুক্তি বোঝানো হয়; যেমন, -u=x,g=xব্যবহারকারী এবং উভয়ই এর অর্থ গ্রুপ নির্বাহযোগ্য বিট সেট করা আবশ্যক।
    • মোডগুলি না পারেন, নিজেদের "ম্যাচে এই বিট সেট করা না শুধুমাত্র যদি" অর্থে নেতিবাচক ম্যাচিং প্রকাশ; -permপ্রাথমিক, নয় সহ আপনার পৃথক এক্সপ্রেশন অবশ্যই ব্যবহার করা উচিত !
  • নোট করুন যে ফাইন্ডের প্রাথমিকগুলি (যেমন -print, বা -perm; এছাড়াও জিএনইউ অনুসন্ধানে ক্রিয়া এবং পরীক্ষা হিসাবে পরিচিত ) স্পষ্টভাবে-a (লজিক্যাল এ্যান্ড) যোগ দেওয়া হয়েছে এবং -oএবং সম্ভবত এবং প্রথম বন্ধনী (যেমন \(এবং\) শেল ) ও যুক্তি প্রয়োগের জন্য প্রয়োজনীয়।
  • find -L ...এর পরিবর্তে সিমলিংকের সাথেfind ... ম্যাচ করার জন্য কেবল ব্যবহার করা হয় এক্সিকিউটেবলের সাথে
    • -Lপ্রতিলিঙ্কগুলির পরিবর্তে সিমলিংকের লক্ষ্যগুলি মূল্যায়ন করার নির্দেশ দেয়; অতএব, ছাড়া -L, -type fপুরোপুরি প্রতীকগুলি উপেক্ষা করবে।
# Match files that have ALL executable bits set - for ALL 3 security
# principals (u (user), g (group), o (others)) and are therefore executable
# by *anyone*.
# This is the typical case, and applies to executables in _system_ locations
# (e.g., /bin) and user-installed executables in _shared_ locations
# (e.g., /usr/local/bin), for instance. 
find -L . -type f -perm -a=x  # -a=x is the same as -ugo=x

# The POSIX-compliant equivalent of `-perm +111` from the accepted answer:
# Match files that have ANY executable bit set.
# Note the need to group the permission tests using parentheses.
find -L . -type f \( -perm -u=x -o -perm -g=x -o -perm -o=x \)

# A somewhat contrived example to demonstrate the use of a multi-principial
# mode (comma-separated clauses) and negation:
# Match files that have _both_ the user and group executable bit set, while
# also _not_ having the other executable bit set.
find -L . -type f -perm -u=x,g=x  \! -perm -o=x

[১] জিএনইউ -executableথেকে প্রাপ্ত man findবিবরণে ৪.৪.২ খুঁজে পান:

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

[২] জিএনইউ ৪.৫.১২ এর চেয়েও পুরানো সংস্করণগুলিকে উপসর্গের অনুমতি দেয় +, তবে এটি প্রথমে হ্রাস করা হয়েছিল এবং শেষ পর্যন্ত অপসারণ করা হয়েছিল, কারণ প্রতীকী মোডের +সাথে একত্রিত হওয়ার ফলে সম্ভবত যথাযথ অনুমতিগুলির মুখোশ হিসাবে ব্যাখ্যা করার কারণে অপ্রত্যাশিত ফলাফল পাওয়া যায় । যদি আপনি (ক) একটি সংস্করণ উপর রান সামনে 4.5.12 এবং (খ) নিজেকে সীমাবদ্ধ অকট্যাল মোড শুধুমাত্র, আপনি পারে ব্যবহার দিয়ে পার পেতে সঙ্গে উভয় গনুহ খুঁজে পেতে এবং বাসদ খুঁজে, কিন্তু এটি একটি ভাল ধারণা নয়।+


2
সবচেয়ে ব্যাপক এসও উত্তর কখনও? ;)
andynormancx

@ এবং নিয়ামনম্যাক্সস :) ঠিক আছে, বুলেট পয়েন্টের নিখুঁত সংখ্যার দিক থেকে, আমি এই প্রতিযোগীকে প্রস্তাব দিতে পারি ।
mklement0

11

সুতরাং বর্তমান ব্যবহারকারীর দ্বারা নির্বাহযোগ্য ফাইলগুলি খুঁজে পাওয়ার জন্য আরও 1 সম্ভাবনা থাকতে হবে:

find . -type f -exec test -x {} \; -print

(এখানে পরীক্ষা কমান্ডটি প্যাথ-এ পাওয়া এক, সম্ভবত /usr/bin/testএটি বিল্টিন নয়) in


1 কেবলমাত্র এটি ব্যবহার করুন যদি -executableপতাকাটি findপাওয়া না যায়! এটি -perm +111সমাধান থেকে সূক্ষ্মভাবে পৃথক ।


2
এটি কাজ করে, তবে এটি বেশ ধীর। এছাড়াও, শেল উপর নির্ভর করে, আপনি মোড়ানো বা ফাইলের নাম জায়গা ধারক অব্যাহতি, মত থাকতে পারে '{}'বা \{\}
আয়নোক্লাস্ট ব্রিঘাম

1
@ mklement0 এটি আমার দ্বারা নির্বাহযোগ্য কমান্ডগুলিকে -executableআমার কমান্ডের মতো বা তার মতো খুঁজে পাবে না।
gniourf_gniourf

1
ধন্যবাদ, @gniourf_gniourf - আমার সেখানে সত্যিই কয়েকটি ভুল ধারণা ছিল। আমি এখানে আপনার অন্য মন্তব্য পুনর্মুদ্রণের করছি, কারণ আমি এখন আমার উত্তর মুছে ফেলার জন্য অন্তত আছি (সম্ভবত পুনরুত্থান হবে, সেখানে যদি কিছু উদ্ধারযোগ্য): " find . -type f -perm -u=xহয় না সমতুল্য -executable: -executableসমস্ত ফাইল ব্যবহারকারী নির্বাহ করতে পারেন মিলে যায়, এবং এই অন্তর্ভুক্ত g+xযদি আমি সঠিক গোষ্ঠীতে থাকি বা o+x। প্রকৃতপক্ষে -perm -u=xপ্রচুর ফাইল পাওয়া যাবে যা ব্যবহারকারী কার্যকর করতে পারে না এবং ব্যবহারকারী মৃত্যুদণ্ড কার্যকর করতে পারে এমন কয়েকটি মিস করে miss "
mklement0

1
@ আইনোক্লাস্টব্রিজহাম: উদ্ধৃতি দেওয়ার সময় {}একটি অনুমানের প্রয়োজনীয়তা (এবং উদ্ধৃতিতে আঘাত লাগে না), বাস্তবে এটি পসিক্স-এর মতো শেল এবং প্রয়োজনীয় নয় csh। আপনি শাঁস কি জানেন কোথায় হয় প্রয়োজনীয়?
mklement0

4
@ আইয়নোক্লাস্টব্রিগাম: আকর্ষণীয়, ধন্যবাদ; সুতরাং, ইন fish, {}অবশ্যই '{}'বা হিসাবে পালাতে হবে \{\}। নোট করুন যে bash, kshএবং zshএকই ধরণের ধনুর্বন্ধনী প্রসারণ সরবরাহ; যাইহোক, তারা unquoted টোকেন প্রিন্ট {} হিসাবে (এবং এইভাবে: পলায়নের জন্য কোন প্রয়োজন), কারণ তারা এটি একটি কি লক্ষ্য করে না বৈধ বক্রবন্ধনী অভিব্যক্তি (তারা অন্তত প্রয়োজন 2 , টোকেন, অথবা একটি বৈধ সাংখ্যিক ক্রম অভিব্যক্তি) যেহেতু fish ঘোষিত {}একটি বৈধ বক্রবন্ধনী এক্সপ্রেশন যা খালি স্ট্রিংয়ের ফলাফল ।
mklement0

9

আপনি -executableপরীক্ষার পতাকা ব্যবহার করতে পারেন :

-executable
              Matches files which are executable  and  directories  which  are
              searchable  (in  a file name resolution sense).

4
অনাবশ্যক একটি অজানা বিকল্প বলে মনে করা হয়।
ভাল আসলে

4
এটি কি কোনও জিএনইউ সন্ধানের এক্সটেনশন হবে? যেহেতু ট্যাগটি ইউনিক্স, লিনাক্স নয়, কমপক্ষে একটি জিএনইউ এক্সটেনশান যেমন নথিভুক্ত করা প্রয়োজন।
জোনাথন লেফলার

3
কমপক্ষে ওএস এক্স-তে পাওয়া বিএসডি ফাইন্ড কমান্ড দ্বারা এই বিকল্পটি সমর্থন করে না This এটি একটি জিএনইউ এক্সটেনশন, তবে এটি অন্য স্বাদগুলির দ্বারা সমর্থিত হতে পারে।
আয়নোক্লাস্ট ব্রিঘাম

এফডব্লিউআইডাব্লু, আমি এটি 10 ​​এর মধ্যে না হওয়ার মতো দেখতে পেয়েছি তবে পুরুষদের>> 11 এ পেয়েছি (এতে কিছুটা জ্বলজ্বল হয়েছে)
পিটার টার্নার

নোট করুন যে এটি আসলে সমস্ত উদাহরণ পায় না। আমার ক্ষেত্রে আমার কাছে একটি ফাইল ছিল যা আমার মালিকানাধীন -rw-r-xr-xযা -executableসনাক্ত করতে পারে না
Dezza

2

এটি আমার পক্ষে কাজ করেছে এবং ভাগ করে নেওয়ার চিন্তাভাবনা করেছে ...

find ./ -type f -name "*" -not -name "*.o" -exec sh -c '
    case "$(head -n 1 "$1")" in
      ?ELF*) exit 0;;
      MZ*) exit 0;;
      #!*/ocamlrun*)exit0;;
    esac
exit 1
' sh {} \; -print

13
কয়েক হাজার কেস কেবল আরও রয়েছে, এবং আপনি আবার নতুন করে তৈরি করতে পারবেন file!
ট্রিপলি

@ ট্রিপলি +1 দুর্দান্ত এই এক্সটেনশনটি find ./ -mime application/x-sharedlib -o -mime application/x-dosexec
ড্যানিয়েল অ্যাল্ডার

@ ড্যানিয়েল অ্যাল্ডার, আপনি কোন সংস্করণ ব্যবহার করছেন? আমি ফাইন্ড -মাইম বিকল্পটি খুঁজে পাইনি (জিএনইউ সন্ধানী) ৪.৪.২
অজয়কুমারবাসুথকর

@ ট্রিপলি +1 'ফাইল' এবং / 'মিমিটাইপ' ব্যবহার করা ভাল ধারণা বা সংস্করণটি আবিষ্কার করা যা মাইম সমর্থন করে এটি আরও ভাল, এছাড়াও যদি 'ফাইল' / 'মাইমটাইপ'-এর ফিল্টারিং এবং কেবলমাত্র এক্সিকিউটেবল (গুলি) প্রদর্শনের বিকল্প রয়েছে কিনা তা ভেবে অবাক হচ্ছেন।
অজয় কুমারবাসুথকর

2
find . -executable -type f

ফাইলটি বাস্তবায়িতযোগ্য এমন কোনও গ্যারান্টি দেয় না যে এটি এক্সিকিউশন বিট সেট সহ ফাইলগুলি খুঁজে পাবে। যদি তুমি করো

chmod a+x image.jpg

উপরের সন্ধানটি ভাববে ইমেজ.জেপজি বাস্তবায়নযোগ্য, এমনকি যদি এটি বাস্তবায়িত বিট সেট সহ একটি জেপিইগ চিত্র হয়।

আমি সাধারণত এটি নিয়ে ইস্যুটি নিয়ে কাজ করি:

find . -type f -executable -exec file {} \; | grep -wE "executable|shared object|ELF|script|a\.out|ASCII text"

আপনি যদি এক্সিকিউটেবল ফাইল সম্পর্কিত গম্বুজ সম্পর্কিত তথ্য মুদ্রণ করতে চান তবে আপনি এই জাতীয় কিছু করতে পারেন:

find . -type f -executable -printf "%i.%D %s %m %U %G %C@ %p" 2>/dev/null |while read LINE
do
  NAME=$(awk '{print $NF}' <<< $LINE)
  file -b $NAME |grep -qEw "executable|shared object|ELF|script|a\.out|ASCII text" && echo $LINE
done

উপরের উদাহরণে ফাইলটির পুরো পথের নামটি সর্বশেষ ক্ষেত্রের মধ্যে রয়েছে এবং ফাইলের নাম অন্য কোথাও যদি থাকত তবে আপনি যেখানে এটি নাম্বার "NAME = $ (awk '{মুদ্রণ $ এনএফ}' <<< $ লাইন)" দিয়ে খুঁজছেন তা প্রতিবিম্বিত করতে হবে আউটপুট স্ট্রিংয়ের জন্য আপনাকে "NF" সঠিক সংখ্যাসূচক অবস্থানের সাথে প্রতিস্থাপন করতে হবে। যদি আপনার বিভাজক স্থান না হয় তবে আপনার বিভাজক কী তা আপনাকেও জানাতে হবে।


1

এটি অত্যন্ত হাস্যকর যে এটি অতি সহজ নয় ... অসম্ভবের পাশে থাকুন । হাত আপ, আমি অ্যাপল / স্পটলাইট থেকে পিছিয়ে যাই ...

mdfind 'kMDItemContentType=public.unix-executable'

অন্তত এটি কাজ করে!


mdfindওএসএক্স সম্পর্কে জানা ভাল । নোট করুন যে আপনার কমান্ডটি পুরো সিস্টেমের জন্য ইউনিক্স এক্সিকিউটেবলের প্রতিবেদন করেmdfind -onlyin . 'kMDItemContentType=public.unix-executable'বর্তমান ডিরেক্টরিটির সাবট্রিতে ফলাফল সীমাবদ্ধ করে। ছোটখাটো আগ্রহের বিষয়: অনুসন্ধান কেবল নির্দিষ্ট ডিরেক্টরিতে সীমাবদ্ধ করা (সাবফোল্ডার ছাড়াই) দৃশ্যত সমর্থিত নয়। এক্সিকিউটেবল ফাইলগুলির সিমলিংকগুলি দৃশ্যত কখনও অন্তর্ভুক্ত থাকে না। কৌতূহলীভাবে, একবার mdfindএক্সিকিউটেবল হওয়ার জন্য একটি ফাইল খুঁজে পেয়েছে, পরবর্তীতে এক্সিকিউটেবল বিট অপসারণ করা হয় না
mklement0

আমি মনে করি যে স্পটলাইট এক্সিকিউটেবল ইউনিক্স ফাইলগুলি কীভাবে সনাক্ত / সনাক্ত করে; আমি অ্যাপলের সাথে একটি বাগ ফাইল করেছি, এবং ওপেনডাআর.মে / 62২6268৩ এও । আমি আপনাকে উত্সাহিত - এবং অন্য কেউ এই কার্যকারিতা আগ্রহী - এছাড়াও বাগ একটি ত্রুটি দায়ের করার bugreport.apple.com
mklement0

(মন্তব্যে ঝাঁকুনির জন্য দুঃখিত; আশা করি, তারা এখন ঠিক আছে) এর mdfind -onlyin . 'kMDItemContentType=public.unix-executable'মতো আচরণ find . -type f -perm +111 -printকরে। এটি, কোনও নির্বাহযোগ্য বিট সেট সহ এটি ফাইলগুলি সন্ধান করে , যা মিথ্যা ধনাত্মকতা অর্জন করতে পারে (যদিও এটি বাস্তবে কোনও সমস্যা নাও হতে পারে) - কেবলমাত্র বিএসডি সন্ধানের মাধ্যমে বর্তমান ব্যবহারকারীর দ্বারা নির্বাহযোগ্য ফাইলগুলি খুঁজে পেতে @ gniourf_gniourf এর উত্তর দেখুন। একটি findভিত্তিক সমাধান ব্যবহার করার সুবিধা রয়েছে যে আপনি এক্সিকিউটেবল ফাইলগুলির জন্য সিমলিংকগুলিও খুঁজে পেতে পারেন , যদি চান (বিকল্প -L), যা mdfindআপাতদৃষ্টিতে করতে পারে না।
mklement0

1
@ এম কেলেটমেন্ট ০ আমার উত্তরটি অলঙ্কৃত অলঙ্করণগুলি - পয়েন্ট হোমটিতে চেষ্টা করার জন্য - তবে হ্যাঁ, আপনি প্রায়শই কখনও এই ফর্মটি "সুসংহত" ব্যবহার করবেন না। অন্য কোনো বিকল্প - নিশ্চিত না যদি তার আসা পর্যন্ত - হয় ভাল পুরানো globbing .. ls /Applications/**/*(*)আপনার (আমার?) zshশেল
অ্যালেক্স গ্রে

কার্যকর zshটিপ জন্য ধন্যবাদ - এটি জানেন না; (মনে হচ্ছে আপনি করতে পারেন পারেন এক্সেকিউটেবল মেলে ( *) বা symlinks ( @), কিন্তু উভয়, ঠিক?)। আপনার মূল বিষয় হিসাবে: আমাকে পুনরায় বলতে চাই: find . -type f -perm +a=xআপনার mdfindআদেশটি যা করবে তা আরও কার্যকর করবে , যখন আপনার আদেশটি করবে । এমনকি আপনি এটি পজিএক্স-অনুগত হিসাবে সংশোধন করতে পারেন।
mklement0

1

ওয়েল এর সহজ উত্তরটি হ'ল: "আপনার নির্বাহযোগ্য ফাইলগুলি আপনার PATH ভেরিয়েবলের অন্তর্ভুক্ত ডিরেক্টরিগুলিতে রয়েছে" তবে এটি সত্যিই আপনার এক্সিকিউটেবলগুলি খুঁজে পাবে না এবং যে কোনওভাবে এক্সিকিউটেবলকে মিস করতে পারে।

আমি ম্যাক সম্পর্কে তেমন কিছুই জানি না তবে আমি মনে করি "এমডিফাইন্ড 'কেএমডিআইটিমেট কনটেন্টটাইপ = পাবলিক.ইনিক্স-এক্সিকিউটেবল" "সম্ভবত ব্যাখ্যা করা স্ক্রিপ্টগুলির মতো জিনিস মিস করতে পারে

এক্সিকিউটেবল বিটস সেট (যদি তারা বাস্তবে নির্বাহযোগ্য কিনা তা নির্বিশেষে) ফাইলগুলি খুঁজে পাওয়া আপনার পক্ষে যদি ঠিক থাকে তবে তা করা ভাল fine

find . -type f -perm +111 -print

"সমর্থিত" বিকল্পটি সমর্থিত যেখানে এসিএল এবং অন্যান্য অনুমতি শৈল্পিকাগুলি দেখার জন্য আরও একটি ফিল্টার তৈরি করা হবে তবে প্রযুক্তিগতভাবে "-pemr +111" থেকে আলাদা নয়।

সম্ভবত ভবিষ্যতে সন্ধান "-ম্যাজিক" সমর্থন করবে এবং নির্দিষ্ট ম্যাজিক আইডি সহ ফাইলগুলির জন্য আপনাকে স্পষ্টভাবে দেখতে দেবে ... তবে তারপরে আপনি সমস্ত এক্সিকিউটেবল ফর্ম্যাট ম্যাজিক আইডি জরিমানা করতে পারবেন specify

আমি ইউনিক্সে প্রযুক্তিগতভাবে সঠিক সহজ উপায় সম্পর্কে অসচেতন।


1

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

 gfind . -type f -exec bash -c '[[ $(file -b "'{}'") == *" executable "* ]] ' \; -print

অথবা আপনারা যারা ম্যাকপোর্টগুলি (লিনাক্স ব্যবহারকারী) ব্যবহার করছেন না বা অন্যথায় gnu আপনার পছন্দমতো ইনস্টল করেছেন তা খুঁজে পান:

 find . -type f -exec bash -c '[[ $(file -b "'{}'") == *" executable "* ]] ' \; -print

যদিও আপনি ওএস এক্স এ থাকলে এটি আইসেক্সেক্স নামে কোথাও লুকিয়ে থাকা কিছুটা ইউটিলিটি নিয়ে আসে যা মূলত আপনার জন্য সেই ছোট্ট পরীক্ষাটি বান্ডিল করে দেয় যাতে আপনি যদি এটি সন্ধান করেন তবে কমান্ড লাইনটি সংক্ষিপ্ত করতে পারবেন। তবে এই পদ্ধতিটি আরও নমনীয় কারণ আপনি সহজেই == পরীক্ষাকে = ~ পরীক্ষার সাথে প্রতিস্থাপন করতে পারেন এবং এক্সিকিউটেবল প্লেইন টেক্সট ফাইলগুলি বা আপনার ফাইল কমান্ড যে কোনও তথ্য ফেরত দেয় এমন আরও জটিল বৈশিষ্ট্যগুলি পরীক্ষা করতে এটি ব্যবহার করতে পারেন।


এখানে উদ্ধৃতি দেওয়ার জন্য সঠিক নিয়মগুলি অত্যন্ত অস্বচ্ছ, তাই আমি কেবল পরীক্ষার মাধ্যমে এবং ত্রুটির দ্বারা এটি শেষ করেছিলাম তবে আমি সঠিক ব্যাখ্যা শুনতে পছন্দ করব।


0

আমার একই সমস্যা ছিল, এবং উত্তরটি ডেমেনু উত্স কোডে ছিল : সেই উদ্দেশ্যে তৈরি করা স্টেস্ট ইউটিলিটি। আপনি 'stest.c' এবং 'arg.h' ফাইলগুলি সংকলন করতে পারেন এবং এটি কাজ করা উচিত। ব্যবহারের জন্য একটি ম্যান পেজ রয়েছে, যা আমি সুবিধার জন্য সেখানে রেখেছি:

STEST(1)         General Commands Manual         STEST(1)

NAME
       stest - filter a list of files by properties

SYNOPSIS
       stest  [-abcdefghlpqrsuwx]  [-n  file]  [-o  file]
       [file...]

DESCRIPTION
       stest takes a list of files  and  filters  by  the
       files'  properties,  analogous  to test(1).  Files
       which pass all tests are printed to stdout. If  no
       files are given, stest reads files from stdin.

OPTIONS
       -a     Test hidden files.

       -b     Test that files are block specials.

       -c     Test that files are character specials.

       -d     Test that files are directories.

       -e     Test that files exist.

       -f     Test that files are regular files.

       -g     Test  that  files  have  their set-group-ID
              flag set.

       -h     Test that files are symbolic links.

       -l     Test the contents of a directory  given  as
              an argument.

       -n file
              Test that files are newer than file.

       -o file
              Test that files are older than file.

       -p     Test that files are named pipes.

       -q     No  files are printed, only the exit status
              is returned.

       -r     Test that files are readable.

       -s     Test that files are not empty.

       -u     Test that files have their set-user-ID flag
              set.

       -v     Invert  the  sense  of  tests, only failing
              files pass.

       -w     Test that files are writable.

       -x     Test that files are executable.

EXIT STATUS
       0      At least one file passed all tests.

       1      No files passed all tests.

       2      An error occurred.

SEE ALSO
       dmenu(1), test(1)

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