কীভাবে আমি "সন্ধান" থেকে সমস্ত "অনুমতি অস্বীকার করা" বার্তা বাদ দিতে পারি?


794

আমাকে এর থেকে সমস্ত অনুমতি অস্বীকৃত বার্তাগুলি গোপন করতে হবে :

find . > files_and_folders

যখন এই জাতীয় বার্তা আসে তখন আমি পরীক্ষা করছি। আমাকে সমস্ত ফোল্ডার এবং ফাইলগুলি সংগ্রহ করতে হবে, যা এটি উত্থাপিত হয় না।

files_and_foldersফাইলের অনুমতি স্তরের নির্দেশনা দেওয়া কি সম্ভব ?

আমি কীভাবে একই সাথে ত্রুটিগুলি আড়াল করতে পারি?

উত্তর:


259

দ্রষ্টব্য:
* এই উত্তরটি সম্ভবত ব্যবহারের মামলার পরোয়ানা থেকে গভীরতর find 2>/dev/nullহয় এবং অনেক পরিস্থিতিতে এটি যথেষ্ট ভালও হতে পারে। এটি এখনও ক্রস-প্ল্যাটফর্মের দৃষ্টিকোণ এবং কিছু উন্নত শেল কৌশলগুলির আলোচনার জন্য এটি সমাধানের স্বার্থে যতটা সম্ভব শক্তিশালী এটির পক্ষে আগ্রহী হতে পারে, যদিও এর বিরুদ্ধে রক্ষিত মামলাগুলি মূলত অনুমানযোগ্য হতে পারে।
* যদি আপনার সিস্টেমটি স্থানীয় ত্রুটি বার্তাগুলি দেখানোর জন্য কনফিগার করা থাকে তবে ইংরাজী বার্তাগুলি প্রতিবেদন করা হয়েছে তা নিশ্চিত করার জন্য findনীচের কলগুলিকে LC_ALL=C( LC_ALL=C find ...) এর সাথে পূর্ববর্তী করুন , যাতে এটি উদ্দেশ্য হিসাবে কাজ করে। Invariably অবশ্য কোনো ত্রুটি বার্তা না প্রদর্শিত পান, তারপরে ইংরেজিতে হিসাবে ভাল হতে হবে। grep -v 'Permission denied'

যদি আপনার শেলটি হয় bashবাzsh থাকে তবে যুক্তিযুক্ত সরল থাকাকালীন শক্তিশালী এমন একটি সমাধান রয়েছে যা কেবলমাত্র পসিক্স-সম্মতিযুক্ত findবৈশিষ্ট্যগুলি ব্যবহার করে ; bashনিজেই পসিক্সের অংশ না হলেও , বেশিরভাগ আধুনিক ইউনিক্স প্ল্যাটফর্মগুলি এর সাথে আসে, এই সমাধানটি ব্যাপকভাবে বহনযোগ্য:

find . > files_and_folders 2> >(grep -v 'Permission denied' >&2)

দ্রষ্টব্য: একটি ছোট্ট সম্ভাবনা রয়েছে যে কিছু শেষ হওয়ার পরে কিছু grepআউটপুট আসতে পারে , কারণ সামগ্রিক কমান্ড ভিতরে কমান্ডটি শেষ হওয়ার জন্য অপেক্ষা করে না । ইন , আপনি কমান্ডে যুক্ত করে এটি প্রতিরোধ করতে পারেন । find>(...)bash| cat

  • >(...)একটি (খুব কমই ব্যবহৃত) হয় আউটপুট প্রক্রিয়া প্রতিকল্পন আউটপুট পুনঃনির্দেশিত অনুমতি দেয় (এই ক্ষেত্রে, দ্বারা stderr আউটপুট ( 2>) কমান্ড ভিতরে stdin থেকে >(...)
    ছাড়াও bashএবং zsh, kshসমর্থন তাদের পাশাপাশি নীতিগতভাবে কিন্তু থেকে ফেরৎ করে সেগুলি একত্রিত করার চেষ্টা stderr , যেমন এখানে ( 2> >(...)) করা হয়েছে , নিঃশব্দে উপেক্ষা করা হবে (ইন ksh 93u+) বলে মনে হচ্ছে ।

    • grep -v 'Permission denied'( ) কমান্ডের স্টার্ডার স্ট্রিম থেকে) সমস্ত লাইন ফিল্টার করে যা বাক্যাংশটি ধারণ করে এবং বাকী রেখাগুলি স্ট্ডার ( ) এ আউটপুট করে ।-vfindPermission denied>&2

এই পদ্ধতিটি হ'ল:

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

  • পার্শ্ব-প্রতিক্রিয়া মুক্ত : findএর প্রস্থান কোডটি সংরক্ষণ করা হয়েছে: অন্ততপক্ষে ফাইল-সিস্টেম আইটেমগুলির মধ্যে একটিতে অ্যাক্সেসের অক্ষমতার ফলে প্রস্থান কোডের ফলাফল পাওয়া গেছে 1(যদিও এটি আপনাকে জানায় না যে অনুমতি-অস্বীকার হওয়াগুলি ব্যতীত অন্য কোনও ত্রুটি ঘটেছে (খুব বেশি))।


পসিক্স-সম্মতিযুক্ত সমাধান:

সম্পূর্ণ পসিক্স-কমপ্লায়েন্ট সমাধানগুলির সীমাবদ্ধতা থাকে বা অতিরিক্ত কাজের প্রয়োজন হয়।

যদি findআউটপুট যেকোন উপায়ে কোনও ফাইলের ক্যাপচার করতে হয়, বা জোনাথন লেফ্লারের উত্তর থেকে পাইপলাইন-ভিত্তিক সমাধানটি সহজ, দৃ ,় এবং পসিএক্স-সম্মতিযুক্ত:

find . 2>&1 >files_and_folders | grep -v 'Permission denied' >&2

মনে রাখবেন যে পুনঃনির্দেশগুলির ক্রমটি গুরুত্বপূর্ণ: প্রথমে2>&1 আসবে ।

সামনে একটি ফাইল স্টাডআউট আউটপুট ক্যাপচার কেবল পাইপলাইনের মাধ্যমে কেবল ত্রুটি বার্তা 2>&1প্রেরণ করতে দেয় , যা পরে নির্বিঘ্নে কাজ করতে পারে।grep

শুধুমাত্র downside হয় যে সামগ্রিক প্রস্থান কোড হতে হবে grepকমান্ডের না findযদি সেখানে আছেন: এর, যা এই ক্ষেত্রে অর্থ হলো কোন সব বা ত্রুটি শুধুমাত্র অনুমতি-বঞ্চিত ত্রুটি, প্রস্থান কোড করা হবে 1(সংকেত ব্যর্থতা ), অন্যথায় ( অনুমতি-অস্বীকার হওয়া ব্যতীত ত্রুটিগুলি) 0- যা উদ্দেশ্যটির বিপরীত।
এটি বলেছিল, findএর বহির্গমন কোডটি খুব কমই ব্যবহৃত হয় , কারণ এটি প্রায়শই অ-অস্তিত্বহীন পথ অতিক্রম করার মতো মৌলিক ব্যর্থতার বাইরে অল্প তথ্য সরবরাহ করে ।
যাইহোক, এমনকি কিছু নির্দিষ্ট ক্ষেত্রেইনপুট পাথ অনুমতি অভাবে দুর্গম হচ্ছে হয় প্রতিফলিত findএর প্রস্থান কোড (উভয় গনুহ ও বাসদের মধ্যে find): একটি অনুমতি-বঞ্চিত ত্রুটি দেখা দেয় যদি জন্য কোন প্রক্রিয়া ফাইল, প্রস্থান কোড সেট করা হয় 1

নিম্নলিখিত পার্থক্য সম্বোধন করে:

find . 2>&1 >files_and_folders | { grep -v 'Permission denied' >&2; [ $? -eq 1 ]; }

এখন, প্রস্থান কোডটি অন্য কোনও ত্রুটি Permission deniedঘটেছে কিনা তা নির্দেশ করে : 1যদি তা হয় তবে 0অন্যথায়।
অন্য কথায়: প্রস্থান কোডটি এখন কমান্ডের প্রকৃত অভিপ্রায়াকে প্রতিফলিত করে: সাফল্য ( 0) রিপোর্ট করা হয়েছে, যদি কোনও ত্রুটি না থাকে বা কেবল অনুমতি-অস্বীকার ত্রুটি ঘটে থাকে।
এটি findশীর্ষে সমাধান হিসাবে যেমন কেবল প্রস্থান কোডটি পাস করার চেয়ে তর্কযুক্ত এমনকি আরও ভাল ।


gniourf_gniourf মন্তব্যের সংখ্যা (এখনও POSIX-অনুবর্তী) প্রস্তাব এই সমাধান অত্যাধুনিক পুনঃনির্দেশগুলি ব্যবহারের সাধারণীকরণ , যা ফাইল পাথ মুদ্রণ ডিফল্ট ব্যবহারকে এমনকি কাজ করে stdout- এ :

{ find . 3>&2 2>&1 1>&3 | grep -v 'Permission denied' >&3; } 3>&2 2>&1

সংক্ষেপে: কাস্টম ফাইল বর্ণনাকারী 3অস্থায়ীভাবে stdout ( 1) এবং stderr ( 2) অদলবদল করতে ব্যবহৃত হয় , যাতে ত্রুটি বার্তাগুলি একাgrep stdout এর মাধ্যমে পাইপ করা যায়।

এই পুনঃনির্দেশগুলি ছাড়াই, ডেটা (ফাইলের পাথ) এবং ত্রুটি বার্তাগুলি উভয়ই grepস্টাডাউটের মাধ্যমে পাইপ করা grepহত এবং এরপরে ত্রুটি বার্তা Permission denied এবং একটি (অনুমান) ফাইলের মধ্যে পার্থক্য করতে সক্ষম হবে না যার নামটি বাক্যাংশটি ধারণ করে Permission denied

প্রথম সমাধান হিসাবে, তবে, উল্লিখিত প্রস্থান কোডটি হ'ল grepনয় find, তবে উপরের মত একই ফিক্স প্রয়োগ করা যেতে পারে।


বিদ্যমান উত্তরের উপর নোট:

  • বিভিন্ন পয়েন্ট সম্পর্কে খেয়াল করা হয় মাইকেল Brux এর উত্তর , find . ! -readable -prune -o -print:

    • এটির জন্য জিএনইউ প্রয়োজন find; উল্লেখযোগ্যভাবে, এটি ম্যাকস-এ কাজ করবে না। অবশ্যই, যদি আপনার GNU এর সাথে কাজ করার জন্য কেবল কমান্ডের প্রয়োজন হয় তবে এটি findআপনার সমস্যা হবে না।

    • কিছু Permission deniedত্রুটি এখনও তলিয়ে যেতে পারে : ডিরেক্টরিগুলির চাইল্ড আইটেমগুলির find ! -readable -pruneজন্য এই জাতীয় ত্রুটিগুলি প্রতিবেদন করে যার জন্য বর্তমান ব্যবহারকারীর অনুমতি রয়েছে, তবে (কার্যকর করার যোগ্য) অনুমতি নেই। কারণ কারণ ডিরেক্টরির নিজেই হয় পাঠযোগ্য, মৃত্যুদন্ড কার্যকর নয় এবং অবতরণ করেন প্রয়াস মধ্যে ডিরেক্টরিটি তারপর ত্রুটি বার্তা আরম্ভ করে। তাই বলা হয়, সাধারণত ক্ষেত্রে জন্য অনুমতি অনুপস্থিত করা হবে।rx-pruner

    • দ্রষ্টব্য: নীচের বিষয়টি দর্শনের এবং / অথবা নির্দিষ্ট ব্যবহারের বিষয়, এবং আপনি সিদ্ধান্ত নিতে পারেন যে এটি আপনার পক্ষে প্রাসঙ্গিক নয় এবং আদেশটি আপনার প্রয়োজনীয়তার সাথে খাপ খায়, বিশেষত যদি পথগুলি মুদ্রণ করা হয় তবে:

      • আপনি যদি অনুমতি-অস্বীকৃত ত্রুটি বার্তাগুলির ফিল্টারিংকে কোনও পৃথক টাস্কটি প্রয়োগ করতে চান যা আপনি কোনও find কমান্ডের প্রয়োগ করতে সক্ষম হতে চান , তবে অনুমতি-অস্বীকৃত ত্রুটিগুলি সক্রিয়ভাবে প্রতিরোধের বিপরীত পদ্ধতির জন্য findকমান্ডের মধ্যে "শব্দ" প্রবর্তন করা প্রয়োজন , যা প্রবর্তন করে জটিলতা এবং লজিক্যাল ফাঁদ
      • উদাহরণস্বরূপ, মাইকেল এর উত্তরে সর্বাধিক ভোট প্রাপ্ত মন্তব্য (এই লেখার মতো) ফিল্টার অন্তর্ভুক্ত করে কমান্ডটি কীভাবে প্রসারিত করতে হবে তা দেখানোর চেষ্টা করেছে -name:
        find . ! -readable -prune -o -name '*.txt'
        এটি অবশ্য উদ্দেশ্য অনুসারে কাজ করে না , কারণ অনুসরণ করার -printক্রিয়া প্রয়োজনীয় (একটি উত্তর এই উত্তর পাওয়া যাবে )। এ জাতীয় সূক্ষ্মতাগুলি বাগগুলি প্রবর্তন করতে পারে।
  • প্রথম সমাধান জনাথন Leffler এর উত্তর , find . 2>/dev/null > files_and_folders, যেমন তিনি নিজে রাজ্য, অন্ধ নীরব সব ত্রুটি বার্তা (এবং কার্যসংক্রান্ত, কষ্টকর এবং সম্পূর্ণরূপে শক্তসমর্থ নয় তিনি এও ব্যাখ্যা)। বাস্তবিকভাবে বলতে গেলে , এটি সহজ সমাধান , কারণ আপনি যে কোনও এবং সমস্ত ত্রুটি অনুমতি-সম্পর্কিত হতে পারে তা অনুমান করে সন্তুষ্ট হতে পারেন।

  • কুয়াশা এর উত্তর , sudo find . > files_and_folders, সংক্ষিপ্ত এবং বাস্তবমুখী কিন্তু নিছক ছাড়া অন্য কিছুর জন্য অবিবেকী হয় মুদ্রণ ফাইলের নামের সুরক্ষা জনিত কারণে কারণ আপনি চালাচ্ছেন রুট ব্যবহারকারী, "আপনার পুরো সিস্টেমের থাকার খুঁজুন একটি বাগ দ্বারা বিশৃঙ্খলার সৃষ্টি হচ্ছে ঝুঁকি বা একটি দূষিত সংস্করণ, বা একটি ভুল অনুরোধ যা অপ্রত্যাশিতভাবে কিছু লিখেছে, যা আপনি যদি সাধারণ সুযোগ-সুবিধাগুলি দিয়ে চালিয়েছিলেন তবে এটি ঘটতে পারে না "( ট্রিপলির মাধ্যমে মিস্টের উত্তরের মন্তব্য থেকে )।

  • ভাইরাপ্টরের উত্তরের ২ য় সমাধান , find . 2>&1 | grep -v 'Permission denied' > some_fileমিথ্যা পজিটিভগুলির ঝুঁকি (পাইপলাইনের মাধ্যমে স্টাডাউট এবং স্টার্ডারের মিশ্রণ প্রেরণের কারণে) চালায় এবং সম্ভাব্যত স্ট্যাডারের মাধ্যমে -প্রসারণ-অস্বীকৃত ত্রুটিগুলি রিপোর্ট করার পরিবর্তে আউটপুট পাথের পাশাপাশি সেগুলি ধারণ করে আউটপুট ফাইল।


4
শুধু একটি দ্রুত প্রশ্ন: কেন আপনি একটি প্রক্রিয়া প্রতিকল্পন এবং শুধুমাত্র একটি নল ব্যবহার করব: find . 2>&1 > files_and_folders | grep -v 'Permission denied' >&2?
gniourf_gniourf

2
@ ল্যালোওপল্ড হার্টজ 준영: আপনি যদি কোনও বাহ্যিক ফাইলের আউটপুট নিতে না চান, তবে আরও নদীর গভীরতানির্ণয় করুন:{ find . 3>&2 2>&1 1>&3 | grep -v 'Permission denied' >&3; } 3>&2 2>&1
gniourf_gniourf

2
@ LéoLéopoldHertz 준영: ঠিক যে এটি পসিক্স অনুগত। প্রক্রিয়া বিকল্পগুলি >(...)বাশ-নির্দিষ্ট।
gniourf_gniourf

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

3
execute/searchএকটি ডিরেক্টরি 'অনুসন্ধান' করার জন্য (অন্তর্ভুক্ত ফাইলগুলির ইনডগুলি পুনরুদ্ধার করতে) পসিক্সের স্পষ্টতই ফাইল-মোডের অনুমতি প্রয়োজন । findএকটি উপ-ডিরেক্টরিতে নামার readজন্য এটি করে (একটি ডিরেক্টরিতে ফাইল তালিকাতে অনুমতি প্রয়োজন ছাড়াও )। এটি কোনও 'বাগ' বা 'পোর্টিং ত্রুটি' নয়।
wjordan

542

ব্যবহার করুন:

find . 2>/dev/null > files_and_folders

এটি Permission deniedঅবশ্যই ত্রুটিগুলি গোপন করে না , তবে সমস্ত ত্রুটি বার্তা।

যদি আপনি সত্যিই অন্য সম্ভাব্য ত্রুটিগুলি যেমন একটি সিমিলিংকে অনেকগুলি হপ, তবে অনুমতি অস্বীকার না করে রাখতে চান তবে সম্ভবত আপনাকে একটি উড়ন্ত অনুমান করতে হবে যে আপনার কাছে 'অনুমতি অস্বীকার' নামক অনেকগুলি ফাইল নেই এবং চেষ্টা কর:

find . 2>&1 | grep -v 'Permission denied' > files_and_folders

আপনি যদি কেবলমাত্র স্ট্যান্ডার্ড ত্রুটিটি কঠোরভাবে ফিল্টার করতে চান তবে আপনি আরও বিস্তৃত নির্মাণ ব্যবহার করতে পারেন:

find . 2>&1 > files_and_folders | grep -v 'Permission denied' >&2

আমি / ফেরৎ উপর হে findকমান্ড: 2>&1 > files_and_folders |। পাইপ স্ট্যান্ডার্ড আউটপুট grepকমান্ডে পুনঃনির্দেশ করে এবং প্রথমে প্রয়োগ করা হয়। 2>&1মান আউটপুট (নল) হিসাবে একই জায়গায় মান ত্রুটি পাঠায়। > files_and_foldersএকটি ফাইলে মান আউটপুট (কিন্তু মান না ত্রুটি) পাঠায়। নেট ফলাফলটি হ'ল স্ট্যান্ডার্ড ত্রুটিতে লিখিত বার্তাগুলি পাইপ থেকে প্রেরণ করা হয় এবং এর নিয়মিত আউটপুট findফাইলটিতে লেখা হয়। grepফিল্টার মান আউটপুট (আপনি সিদ্ধান্ত নিতে পারেন কিভাবে সিলেক্টিভ আপনি এটা হতে চান, এবং লোকেল হে / এস উপর নির্ভর করে বানান পরিবর্তন করতে হবে পারে) এবং চূড়ান্ত>&2মানে বেঁচে থাকা ত্রুটি বার্তাগুলি (স্ট্যান্ডার্ড আউটপুটে লেখা) আরও একবার স্ট্যান্ডার্ড ত্রুটিতে চলে যায়। চূড়ান্ত পুনঃনির্দেশটি টার্মিনালে alচ্ছিক হিসাবে বিবেচিত হতে পারে তবে এটি কোনও স্ক্রিপ্টে ব্যবহার করা খুব ভাল ধারণা হবে যাতে ত্রুটি বার্তাগুলি স্ট্যান্ডার্ড ত্রুটিতে উপস্থিত হয়।

আপনি কী করতে চান তার উপর নির্ভর করে এই থিমটিতে অন্তহীন প্রকরণ রয়েছে। এটি ইউনিক্সের যে কোনও ভেরিয়েন্টে কোনও বোর্ন শেল ডেরিভেটিভ (বাশ, কর্ন,…) এবং কোনও পসিক্স-অনুবর্তী সংস্করণ সহ কাজ করবে find

আপনি যদি findআপনার সিস্টেমে আপনার নির্দিষ্ট সংস্করণটি মানিয়ে নিতে চান তবে বিকল্প বিকল্পগুলি উপলভ্য হতে পারে। গনুহ findঅপশনের একটি যেমন সেট জন্য বর্তমানে গৃহীত উত্তর দেখার - বিশেষ করে একটি অগণ্য অপশন অন্য সংস্করণের পাওয়া যায় না হয়েছে।


9
আপনি যদি আমার মতো হন তবে লক্ষ্য করুন যে জায়গার অভাব গুরুত্বপূর্ণ! 2>/dev/null, জায়গা ছাড়াই!
নিক

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

3
আমাকে একটি মূলধন পি ব্যবহার করতে হয়েছিল কারণ এটিই আমার টার্মিনালটি ফলাফল করবে: সন্ধান করুন find 2> & 1 | grep -v 'অনুমতি প্রত্যাখ্যান'
ডেভিড ডোরিয়া

4
এটি কীভাবে গ্রহণযোগ্য সমাধান? 1) আপনি সমস্ত ত্রুটিগুলি দেব / নালটিতে পুনর্নির্দেশ করছেন 2) আপনি একটি স্পষ্ট ত্রুটি স্ট্রিং ফিল্টার করছেন !! এগুলির উপর নির্ভর করে খাঁজ কাটা এবং আপনার ফাইলটি যদি 'অনুমতি প্রত্যাখ্যান' নামে একটি ডিরেক্টরিতে থাকে? ওহো!
গুঞ্চারস

10
আমি প্রোগ্রামটির আউটপুট পরিবর্তন করতে গ্রেপিং ত্রুটির স্ট্রিংয়ের বিরুদ্ধে আপত্তি করছি। এটি বেশিরভাগ সময় কাজ করবে, তবে সহজটি সঠিক সমাধান নয় (নীচের অংশের সাথে সন্ধান করুন)। আপনাকে একটি উদাহরণ দেওয়ার জন্য, এটি ওএসএক্সে কাজ করবে না কারণ ত্রুটিটি "অনুমতি অস্বীকৃত" is অন্য যে কোনও সিস্টেমের ক্ষেত্রেও একই রকম যেখানে ত্রুটিযুক্ত স্ট্রিং (আন্তর্জাতিকীকরণের কেউ?)
-তেও বিয়োগাত্মক পার্থক্য রয়েছে

285

ব্যবহার করুন:

find . ! -readable -prune -o -print

বা আরও সাধারণভাবে

find <paths> ! -readable -prune -o <other conditions like -name> -print
  • "অনুমতি অস্বীকার" এড়ানোর জন্য
  • এবং (অন্যান্য) ত্রুটি বার্তাগুলি দমন করবেন না
  • এবং প্রস্থান স্থিতি 0 পান ("সমস্ত ফাইল সফলভাবে প্রক্রিয়া করা হয়")

এর সাথে কাজ করে: সন্ধান করুন (জিএনইউ অনুসন্ধানসমূহ) ৪.৪.২। পটভূমি:

  • -readableপরীক্ষা পাঠযোগ্য ফাইল সাথে মেলে। !অপারেটর ফেরৎ সত্য, যখন পরীক্ষা মিথ্যা। এবং ! -readableমেলে না পঠনযোগ্য ডিরেক্টরি (& ফাইল)।
  • -pruneকর্ম ডিরেক্টরির মধ্যে নেমে নেই।
  • ! -readable -prune অনুবাদ করা যেতে পারে: ডিরেক্টরি যদি পাঠযোগ্য না হয় তবে এটিতে নামবেন না।
  • -readableপরীক্ষা অ্যাকাউন্ট অ্যাক্সেস নিয়ন্ত্রন তালিকা এবং অন্যান্য অনুমতি শিল্পকর্ম যা লাগে -permপরীক্ষা উপেক্ষা করে।

আরও অনেক তথ্যের জন্য এছাড়াও find(1) ম্যানপেজ দেখুন।


6
পার্থক্য ইতিমধ্যে উল্লিখিত হয়। যদি আপনি বুঝতে না পারেন, তবে উত্তরগুলি সম্ভবত আপনার জন্য কোনও পার্থক্য রাখবে না? STDOUT একই - STDERR আলাদা (আপনি এই উত্তর সহ অন্যান্য ত্রুটি বার্তা পান) - $? পৃথক (এই উত্তরটি দিয়ে 0 "সফল", যখন অন্য কোনও ত্রুটি না ঘটে - সর্বদা> 0 / "সাফল্য নয়" যখন দেব / নালকে পুনঃনির্দেশিত হয়) - সম্ভবত কারও "সঠিক" $ দরকার? একটি স্ক্রিপ্টে
মাইকেল ব্রুক

6
@Masi সবচেয়ে বড় ত্রুটি যোনাথনের উত্তর (, grep -v) ফাইলের নাম যা ধারণ করে 'অনুমতি অস্বীকৃত' :) অগ্রাহ্য করবে
ফলের

65
আমি এখানে যুক্ত করা উপযুক্ত বলে মনে করি যে আপনি যদি অন্য কিছু অনুসন্ধানের মানদণ্ড যুক্ত করতে চান তবে এটি করা উচিত -o:find . ! -readable -prune -o -name '*.txt'
টেম্পস্টেড

22
নোট করুন যে পসিক্স একটি বিকল্প হিসাবে findঅন্তর্ভুক্ত করে না -readable; findউভয়ই BSD এর জন্য নয় এবং তাই ম্যাক ওএস এক্স (আমি অন্যান্য সিস্টেম সম্পর্কে নিশ্চিত নই)। সুতরাং, যেখানে আপনার জিএনইউর findগ্যারান্টিযুক্ত রয়েছে, এটি দুর্দান্ত কাজ করে, তবে আপনি যদি সিস্টেমটি জিএনইউ findইনস্টল করা আছে কিনা তার গ্যারান্টি দিতে না পারলে কীভাবে এই রূপান্তর করা যায় তা স্পষ্ট নয় । (এটি লিনাক্সে দুর্দান্ত কাজ করবে; এটি অন্য কোথাও কাজ করতেও পারে বা নাও করতে পারে))
জোনাথন লেফলার

6
find . ! -readable -prune -o -name '*.txt'4.2.2 সন্ধান করে উবুন্টু 14.04 এ কাজ করছে বলে মনে হচ্ছে না। এটা মনে হচ্ছে -name। কিছু অদ্ভুত কারণে আমি সাফল্যের হয়েছেfind . \( ! -readable -prune \) -o -name '*.txt' -print
বিরূদ্ধে-F-ব্যবহার

110

আপনি যদি মূল "/" থেকে অনুসন্ধান শুরু করতে চান তবে আপনি সম্ভবত আউটপুট সামথিংস দেখতে পাবেন:

find: /./proc/1731/fdinfo: Permission denied
find: /./proc/2032/task/2032/fd: Permission denied

এটা অনুমতি কারণে। এটি সমাধান করার জন্য:

  1. আপনি sudo কমান্ড ব্যবহার করতে পারেন:

    sudo find /. -name 'toBeSearched.file'

এটি সুপার ব্যবহারকারীর পাসওয়ার্ড জিজ্ঞাসা করে, পাসওয়ার্ড দেওয়ার সময় আপনি ফলাফলটি দেখতে পাবেন যা আপনি সত্যই চান। আপনার কাছে সুডো কমান্ড ব্যবহার করার অনুমতি না থাকলে যার অর্থ আপনার কাছে সুপার ব্যবহারকারীর পাসওয়ার্ড নেই, প্রথমে সিস্টেম অ্যাডমিনকে আপনাকে sudoers ফাইলে যুক্ত করতে বলুন।

  1. আপনি কিছু স্ট্যান্ডার্ড (সাধারণভাবে প্রদর্শন / স্ক্রিন) থেকে স্ট্যান্ডার্ড ত্রুটি আউটপুট পুনর্নির্দেশ এবং স্ক্রিনে ত্রুটি বার্তাগুলি দেখতে এড়াতে পারেন! একটি বিশেষ ফাইল / dev / নাল এ পুনঃনির্দেশ করুন:

    find /. -name 'toBeSearched.file' 2>/dev/null
  2. আপনি স্ট্যান্ডার্ড ত্রুটি আউটপুট (সাধারণভাবে প্রদর্শন / স্ক্রীন) থেকে স্ট্যান্ডার্ড আউটপুটে (সাধারণভাবে প্রদর্শন / স্ক্রিন) পুনর্নির্দেশ করতে পারেন, তারপরে গ্রেট কমান্ডের সাথে পাইপ -v "ইনভার্ট" প্যারামিটারের সাথে আউটপুট লাইনগুলি না দেখতে দেখতে 'অনুমতি অস্বীকার' করে দিতে পারেন শব্দ জোড়া:

    find /. -name 'toBeSearched.file' 2>&1 | grep -v 'Permission denied'

7
@ স্কটমগ্রোগস্কি ব্যতীত এটি প্রশ্নের উত্তর দেয় না ... 1. সিস্টেম অ্যাডমিনকে আপনাকে sudoers ফাইলে যুক্ত করতে বলুন। 2.sudo find...
স্টিফেন

1
ঠিক আমি খুঁজছেন ছিল কি!
ড্যাঙ্কমাস্টারডান

92

আমাকে ব্যবহার করতে হয়েছিল:

find / -name expect 2>/dev/null

আমি কী খুঁজে পেতে চেয়েছিলাম তার নাম উল্লেখ করে এবং তারপরে এটি সমস্ত ত্রুটিগুলি / dev / null এ পুনঃনির্দেশ করতে বলে

আমি যে প্রত্যাশা প্রোগ্রামটি অনুসন্ধান করেছিলাম তার অবস্থান হওয়ার আশা করুন।


3
@ মসি, উত্তরের কমান্ডটি ব্যবহার করে না expect। পরিবর্তে, expectকেবল এই ফাইলটির নাম যা এই আদেশটি অনুসন্ধান করার চেষ্টা করবে।
ধ্রুব কাপুর

2
একক শ্রেণীর ত্রুটি বার্তাগুলি উপেক্ষা করার জন্য অন্ধভাবে সমস্ত স্টার্ডার আউটপুট পুনঃনির্দেশ করা সাধারণত একটি খারাপ ধারণা - আপনি প্রক্রিয়াটিতে অন্যান্য সমস্ত স্বেচ্ছাসেবী ত্রুটি হারাবেন।
জোসিপ রডিন

59

পাইপ stderrথেকে /dev/nullব্যবহার করে 2>, / dev / নাল

find . -name '...' 2>/dev/null


2
এটি ম্যাক ওএসএক্সেও আমার পক্ষে ভাল কাজ করে। বা এমনকিfind . -name '...' -print 2>/dev/null
শ্যাডোশিপ

30

অপঠনযোগ্য ডিরেক্টরিতে অবতরণ এড়াতে আপনি এগুলির পূর্বাভাসও করতে পারেন -permএবং -pruneপূর্বাভাস ( অনুসন্ধানের প্রোগ্রাম থেকে "অনুমতি অস্বীকৃত" মুদ্রণ বিবৃতিটি কীভাবে সরিয়ে ফেলব? - ইউনিক্স এবং লিনাক্স স্ট্যাক এক্সচেঞ্জ ):

find . -type d ! -perm -g+r,u+r,o+r -prune -o -print > files_and_folders

4
-perm -g+r,u+r,o+rনিছক আছে ফাইল মিলে যায় rসব 3 (পড়ুন) অনুমতি সেট ফাইলের নিরাপত্তা প্রিন্সিপাল, যা কিনা কোন সরাসরি সম্পর্ক রয়েছে বর্তমান ব্যবহারকারীর যে ফাইল পড়তে বা করতে পারেন। এটি উভয় মিস ফাইলগুলিতে সম্ভাব্য যে বর্তমান ব্যবহারকারীর হয়েছে পারবেন পড়া এবং তারা পারছে না ফাইল মেলে।
mklement0

আমি মনে করি find . -type d ! \( -perm -u+r -o -perm -g+r -o -perm -o+r \) -prune -o -printভাল সমাধান হবে।
ম্যাটিয়া 72

2
@ Mattia72: না, এটা সম্পূর্ণরূপে অনুকরণ মৌলিকভাবে অসম্ভব -readableসঙ্গে -perm- আমার আগের মন্তব্য দেখতে এবং এই উদাহরণে বিবেচনা করুন: echo 'hi' > file; sudo chown nobody:nobody file; sudo chmod o-r file; find file -perm -u=rকপি করে প্রিন্ট file, কারণ তার ব্যবহারকারী পড়া বিট সেট করা হয়, কিন্তু এটি সম্পর্কিত nobodyব্যবহারকারী, না বর্তমান ব্যবহারকারীর। বর্তমান ব্যবহারকারী এই ফাইলটি পড়তে পারবেন না; চেষ্টা cat file। আরও দেখুন: আমার এই উত্তর
mklement0

23

পুনঃনির্দেশ মান ত্রুটি। উদাহরণস্বরূপ, আপনি যদি ইউনিক্স মেশিনে ব্যাশ ব্যবহার করছেন তবে আপনি স্ট্যান্ডার্ড ত্রুটিটিকে / dev / নালকে এইভাবে পুনর্নির্দেশ করতে পারেন:

find . 2>/dev/null >files_and_folders

20

উপরের পদ্ধতির ম্যাক ওএস এক্সের ক্ষেত্রে কেসটিকে সম্বোধন করা হয়নি কারণ ম্যাক ওস এক্স -readableস্যুইচটিকে সমর্থন করে না এটি আপনার আউটপুটে 'অনুমতি অস্বীকার' ত্রুটিগুলি এড়াতে পারবেন কীভাবে। এটি কাউকে সাহায্য করতে পারে।

find / -type f -name "your_pattern" 2>/dev/null

findউদাহরণস্বরূপ, আপনি যদি অন্য কোনও কমান্ড ব্যবহার করে থাকেন তবে উদাহরণস্বরূপ, কোনও ডিরেক্টরিতে নির্দিষ্ট প্যাটার্নের ফাইলগুলির আকার অনুসন্ধানের জন্য 2>/dev/nullনীচের চিত্রের মতো এখনও কাজ করবে।

find . -type f -name "your_pattern" -exec du -ch {} + 2>/dev/null | grep total$

এটি প্রদত্ত প্যাটার্নের ফাইলগুলির মোট আকার ফিরিয়ে দেবে। ফাইন্ড 2>/dev/nullকমান্ডের শেষে নোট করুন ।


অপারেটিং সিস্টেমটি ওএস এক্সের সাথে দুর্দান্ত বাঁধাই! জনাথনের উত্তর অংশটি ব্যাখ্যা করে 2>/dev/null। আপনি দয়া করে অংশটি ব্যাখ্যা করতে পারেন -exec du -ch {} + 2>/dev/null | grep total$?
লিও লোপোল্ড হার্টজ 준영

1
@ মাসি আপনি কমান্ড -execদ্বারা প্রাপ্ত ফাইল বা ডিরেক্টরিতে আরও পদক্ষেপ নিতে বিকল্পের সাথে যে কোনও কমান্ড ব্যবহার করতে পারেন finddu -ch file_patternপ্রতিটি ফাইলের মিলের আকার file_patternএবং সেই আউটপুটটির শেষ লাইনটি মেলানো সমস্ত ফাইলের গ্র্যান্ড টোটাল file_pattern। জন্য ম্যান পৃষ্ঠা দেখুন dugrep totalকেবলমাত্র লাইনটি ফিল্টার করে যা গ্র্যান্ড টোটালকে নিষ্কাশন করে (যা শেষ লাইন)।
বুন্টি

13

এই ত্রুটিগুলি স্ট্যান্ডার্ড ত্রুটি আউটপুট (এফডি 2) এ মুদ্রিত হয়। এগুলি ফিল্টার করার জন্য, সমস্ত ত্রুটিগুলি কেবল / dev / নালটিতে পুনর্নির্দেশ করুন:

find . 2>/dev/null > some_file

বা প্রথমে stderr এবং stdout এ যোগদান করুন এবং তারপরে সেই নির্দিষ্ট ত্রুটিগুলি গ্রেপ করুন:

find . 2>&1 | grep -v 'Permission denied' > some_file

11

সহজ উত্তর:

find . > files_and_folders 2>&-

2>&-( -) স্ট্যান্ডার্ড ত্রুটি ফাইল বর্ণনাকারী ( 2) বন্ধ করে তাই সমস্ত ত্রুটি বার্তা নিঃশব্দ হয়ে যায়।

  • প্রস্থান কোডটি এখনও থাকবে 1যদি কোনও ' Permission denied' ত্রুটি অন্যথায় মুদ্রিত হত

জিএনইউর পক্ষে দৃ answer় উত্তর find:

find . -type d \! \( -readable -executable \) -prune -print -o -print > files_and_folders

অতিরিক্ত অপশন প্রেরণ findকরে -prune(মধ্যে সাজানো প্রতিরোধ) কিন্তু এখনও -printকোনো ডিরেক্টরি ( ) যে (না ) উভয় আছে এবং অনুমতি, অথবা ( ) অন্য কোন ফাইল।-typed\!-readable-executable-o-print

  • -readableএবং -executableবিকল্পগুলি জিএনইউ এক্সটেনশনগুলি, পসিক্স স্ট্যান্ডার্ডের অংশ নয়
  • এখনও Permission deniedঅস্বাভাবিক / দূষিত ফাইলগুলিতে ' ' ফিরতে পারে (উদাহরণস্বরূপ, <v2.0.5 ব্যবহার করে ধারক-মাউন্ট করা ফাইল সিস্টেমে প্রভাবিত বাগ রিপোর্ট দেখুন lxcfs)

দৃ Rob় উত্তর যা কোনও পসিক্স-সামঞ্জস্যপূর্ণ find(জিএনইউ, ওএসএক্স / বিএসডি ইত্যাদি) এর সাথে কাজ করে

{ LC_ALL=C find . 3>&2 2>&1 1>&3 > files_and_folders | grep -v 'Permission denied'; [ $? = 1 ]; } 3>&2 2>&1

স্ট্রিংযুক্ত সমস্ত লাইন সরিয়ে স্ট্যান্ডার্ড ত্রুটি স্ট্রিমটি পাস করতে একটি পাইপলাইন ব্যবহার করুন ।grep'Permission denied'

LC_ALL=Cসেট POSIX লোকেল একটি ব্যবহার এনভায়রনমেন্ট ভেরিয়েবল , 3>&2 2>&1 1>&3এবং 3>&2 2>&1 ডুপ্লিকেট ফাইল বর্ণনাকারী নল করতে মান-ত্রুটি প্রবাহ grep, এবং [ $? = 1 ]ব্যবহার []দ্বারা ফিরে ত্রুটি কোড উল্টানো grepমূল আচরণ সূক্ষ পরিমাপক find

  • 'Permission denied'আউটপুট পুনঃনির্দেশের কারণে কোনও ত্রুটিও ফিল্টার করবে (উদাহরণস্বরূপ, যদি files_and_foldersফাইলটি নিজে লেখার যোগ্য না হয়)

জর্ডিফেরানের উত্তর প্রস্তাবটি সম্পর্কে আপনি কীভাবে ভাবেন? - - আপনি কি তার উত্তরটির সাথে তুলনা করতে পারবেন?
লিও লোপোল্ড হার্টজ 준영

2
উল্লিখিত হিসাবে উত্তরটির শেল স্ক্রিপ্টটি সাধারণ-উদ্দেশ্য নয় (কেবলমাত্র $ {m_find_name matching এর সাথে মেলে এমন ডিরেক্টরিগুলি তালিকাবদ্ধ করে) এবং এতে প্রশ্নের সাথে সম্পর্কিত না এমন বেশ কয়েকটি বিকল্প রয়েছে (দুর্দান্ত, / বাড়ি *, -ম্যাক্সডেপথ 5, -ফলো)। এই উত্তরটি সাধারণ-উদ্দেশ্যে থাকা অবস্থায় 'ফিল্টারিং পঠনযোগ্য তবে এক্সিকিউটেবল ডিরেক্টরি নয়' সম্পর্কিত নির্দিষ্ট সমস্যাটিকে আরও সংক্ষিপ্তভাবে সম্বোধন করে।
wjordan

1
@ উইজর্ডান: ধন্যবাদ আমি আমার মন্তব্য মুছে ফেলা করেছি, কিন্তু এক পর্যায়ে এখনও প্রযোজ্য: -permভিত্তিক সমাধান মূল্য উপস্থাপন করা হয় না, কারণ এটি আরো মৌলিকভাবে চেয়ে উদ্ধৃতি প্রস্তাব দেওয়া কিছু করে বিভিন্ন অভিপ্রেত চেয়ে: এটা একটি বিশুদ্ধরূপে হয় ফাইল-কেন্দ্রিক , পরীক্ষা সংক্রান্ত ফাইলের মালিক এবং গ্রুপ, তন্ন তন্ন যার ব্যবহারকারী কমান্ড (দেখুন কলিং সঙ্গে কোনো নিশ্চিত সম্পর্ক আছে এই উত্তর খনি এটা আপনার সংশোধিত গনুহ সমাধান মত এখন দেখে মনে হচ্ছে না ধরা অনুমতি অস্বীকার থেকে গৌন ত্রুটি। ফাইল
mklement0

আপনি যে সিনট্যাক্সটি ব্যবহার করছেন তা আমি স্বীকার করি না (জিএনইউ বা বিএসডি হিসাবে নয়) তবে স্বতঃস্ফূর্ত উদাহরণ দিয়ে আমাকে আমার বক্তব্যটি বর্ণনা করতে দাও: echo 'hi' > file; sudo chown nobody:nobody file; sudo chmod o-r file; find file -perm -u=rপ্রিন্টগুলি file, কারণ এর ব্যবহারকারী পড়ার বিট সেট আছে, তবে এটি nobodyব্যবহারকারীর সাথে সম্পর্কিত , বর্তমান ব্যবহারকারী নয়। বর্তমান ব্যবহারকারী এই ফাইলটি পড়তে পারবেন না; চেষ্টা cat file
mklement0

1
@ এমকিলেটমেন্ট 0 আলোচনার জন্য ধন্যবাদ, আমি অন্য পরীক্ষায় আপনি বর্ণিত আচরণটি পরিচালনা করতে সক্ষম হয়েছি (আমি জানি না যে আমি প্রথমবার কী ভুল করেছিলাম), মনে -permহয় এটি ব্যবহারকারীর বর্তমান অনুমতিগুলি নির্ধারণ করার জন্য কাজ করে না। এই উত্তরটি থেকে বিকল্পটি সরানো হয়েছে।
wjordan

4

কেবল অনুমতি অস্বীকার করার সতর্কতাগুলি এড়ানোর জন্য, অপঠনযোগ্য ফাইলগুলি অনুসন্ধান থেকে ছাঁটাই করে তাদের উপেক্ষা করার জন্য বলুন। আপনার অনুসন্ধানে যেমন ওআর হিসাবে একটি এক্সপ্রেশন যুক্ত করুন

find / \! -readable -prune -o -name '*.jbd' -ls

এটি বেশিরভাগ ক্ষেত্রে (একটি অপঠনযোগ্য ফাইলের সাথে মেলে এবং তালিকা থেকে ছাঁটাই করে) বা ( * .jbd এর মতো নামের সাথে মেলে এবং এটি [ এলএস সহ] প্রদর্শন করুন) বলে । (মনে রাখবেন যে আপনি ডিফল্টরূপে এক্সপ্রেশনগুলি একত্রে ব্যবহার করবেন না যদি না আপনি এটি ব্যবহার করেন না)) আপনাকে দ্বিতীয় এক্সপ্রেশনটিতে -l প্রয়োজন হবে অথবা অন্যথায় মিল খুঁজে পেতে কোনও ডিফল্ট ক্রিয়া যুক্ত করতে পারে যা আপনাকে সমস্ত অপঠনযোগ্য ফাইলও প্রদর্শন করবে ।

তবে যদি আপনি আপনার সিস্টেমে সত্যিকারের ফাইলগুলি সন্ধান করছেন, সাধারণত / dev এ দেখার কোনও কারণ নেই, যার অনেকগুলি ফাইল রয়েছে, সুতরাং আপনার এমন একটি এক্সপ্রেশন যুক্ত করা উচিত যা ডিরেক্টরিটি বাদ দেয় না যেমন:

find / -mount \! -readable -prune  -o  -path /dev -prune  -o  -name '*.jbd' -ls

সুতরাং (তালিকা থেকে অপাঠ্য ফাইল এবং খেজুর মেলে) বা (ম্যাচ পাথ / dev ও তালিকা থেকে খেজুর) বা (যেমন ম্যাচ ফাইল * .jbd এবং এটি প্রদর্শন)


4

ব্যবহার

sudo find / -name file.txt

এটি নির্বোধ (কারণ আপনি অনুসন্ধানটি উন্নত করেছেন) এবং ননসিকিউর, তবে লেখার চেয়ে আরও খাটো।


আপনি এখানে পুরো ফাইল সিস্টেমটি অনুসন্ধান করে তাই আপনার এই "অনুসন্ধানটিকে উন্নত করুন" বলতে বোঝায়। আপনি এটিকে ননসিকিউর বলছেন কেন? কারণ এটি পুরো ফাইল সিস্টেমটি অনুসন্ধান করছে?
লিও লোপোল্ড হার্টজ 준영

2
কারণ sudo রুট অনুমতি নিয়ে ফাইন্ড কমান্ড চালায় যা মূলত একটি খারাপ ধারণা is পৃথকীকরণ এবং সর্বনিম্ন সুবিধার নীতিগুলি লঙ্ঘন করা হয়।
কুয়াশা

3
"টিলা" এখানে, রুট করার সঙ্গে বিশেষাধিকার হয় sudo। আপনার পুরো সিস্টেমটি কোনও বাগ ইন findবা দূষিত সংস্করণ দ্বারা বিভ্রান্ত হওয়ার ঝুঁকি রয়েছে , বা একটি ভুল অনুরোধ যা অপ্রত্যাশিতভাবে কিছু লিখেছে, যা যদি আপনি সাধারণ সুযোগ-সুবিধাগুলি দিয়ে দৌড়ান তবে তা ঘটতে পারে না।
ট্রিপলি

2

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

উপরে দেওয়া উত্তর দ্বারা মাইকেল Brux কখনও কখনও কাজ করে। তবে আমার একটি দৃশ্যে এটি ব্যর্থ হয়েছে! আমি সমস্যাটি আবিষ্কার করেছি এবং এটি নিজেই ঠিক করেছি। আমার যখন ফাইলগুলি ছাঁটাই করা দরকার তখন:

it is a directory AND has no read access AND/OR has no execute access

এখানে মূল সমস্যাটি দেখুন: এবং / ওআর। আমি পড়ার একটি ভাল প্রস্তাবিত শর্ত ক্রম হ'ল:

-type d ! -readable ! -executable -prune

এটি সবসময় কাজ করে না। এর অর্থ একটি ম্যাচ হলে ছাঁটাইটি ট্রিগার হয়:

it is directory AND no read access AND no execute access

পড়ার অ্যাক্সেস মঞ্জুর হলে এক্সপ্রেশনগুলির এই ক্রমটি ব্যর্থ হয় তবে কোনও এক্সিকিউটিভ অ্যাক্সেস হয় না।

কিছু পরীক্ষার পরে আমি এটি সম্পর্কে উপলব্ধি করেছিলাম এবং আমার শেল স্ক্রিপ্ট সমাধানটি এতে পরিবর্তন করেছি:

চমৎকার সন্ধান / বাড়ি * / -ম্যাক্সডেপথ 5-ফাঁকা \
    \ ( -প্রকার- ডি -এ ! \ (-পাঠনযোগ্য -a -অভাবনীয় \) \) -প্রণু \
    -o \
    \ (-প্রকার d -a-readable -a - এক্সিকিউটেবল -a-নাম "$ {m_find_name}" \) -প্রিন্ট

এখানে কীটি সম্মিলিত অভিব্যক্তির জন্য "সত্য নয়" স্থাপন করা হয়েছে:

has read access AND has execute access

অন্যথায় এটির সম্পূর্ণ অ্যাক্সেস নেই, যার অর্থ: এটি কেটে নিন। এটি আমার জন্য এক দৃশ্যে কাজ করার প্রমাণ দেয় যা পূর্ববর্তী প্রস্তাবিত সমাধান ব্যর্থ হয়েছিল।

আমি মন্তব্য বিভাগে প্রশ্নের জন্য নীচে প্রযুক্তিগত বিবরণ সরবরাহ করি। বিবরণ অতিরিক্ত হলে আমি ক্ষমা চাই।

  • Command কমান্ডটি কেন দুর্দান্ত ব্যবহার করছেন? আমি এখানে ধারণা পেয়েছিলাম । প্রথমদিকে আমি ভেবেছিলাম পুরো ফাইল সিস্টেমটি দেখার সময় প্রক্রিয়াটির অগ্রাধিকার হ্রাস করা ভাল। আমি বুঝতে পারি যে এটি আমার কাছে কোনও অর্থবহ নয়, কারণ আমার স্ক্রিপ্টটি কয়েকটি ডিরেক্টরিতে সীমাবদ্ধ। আমি ম্যাক্সডেপথ কমিয়ে 3 এ রেখেছি।
  • / কেন / হোম * / এর মধ্যে অনুসন্ধান করবেন? এটি এই থ্রেডের জন্য এটি প্রাসঙ্গিক নয়। আমি সোর্স কোডের সাহায্যে সমস্ত অ্যাপ্লিকেশন ইনস্টল করে অ সুবিধার অধিকারী ব্যবহারকারীদের সাথে সংকলন করি (মূল নয়)। এগুলি "/ হোম" এর মধ্যে ইনস্টল করা আছে। আমার একাধিক বাইনারি এবং সংস্করণ একসাথে থাকতে পারে। আমাকে সমস্ত ডিরেক্টরি সনাক্ত করতে হবে, মাস্টার-স্লেভ ফ্যাশনে পরিদর্শন ও ব্যাকআপ নিতে হবে। আমার একাধিক "/ হোম" থাকতে পারে (একটি ডেডিকেটেড সার্ভারের মধ্যে বেশ কয়েকটি ডিস্ক চলমান)।
  • -ফলো ব্যবহার করছেন কেন? ব্যবহারকারীরা ডিরেক্টরিতে প্রতীকী লিঙ্ক তৈরি করতে পারে। এটির কার্যকারিতা নির্ভর করে, আমার পাওয়া নিরঙ্কুশ পাথের রেকর্ড রাখতে হবে।

আপনার উত্তর এবং সুন্দর পর্যবেক্ষণ জন্য আপনাকে ধন্যবাদ! আপনার উত্তরটি আরও ভালরূপে দেখার জন্য আমি এখানে একটি উদ্বোধন খুললাম আমি মনে করি এটি পড়ার এবং অ্যাক্সেস কার্যকর করতে না পেরে এটি একটি দুর্দান্ত সন্ধান। - - আপনি দয়া করে ব্যাখ্যা করতে পারেন আপনি কেন niceএবং ব্যবহার করেন find $HOME -maxdepth 5 -follow ...?
লিও লোপোল্ড হার্টজ 준영

2
শেল স্ক্রিপ্ট হিসাবে বিবৃত সাধারণ (শুধুমাত্র তালিকা ডিরেক্টরি ম্যাচিং নয় ${m_find_name}), এবং প্রশ্নের প্রাসঙ্গিক নয় বেশ কয়েকটি বিকল্প থাকে ( nice, /home*, -maxdepth 5, -follow)। আমি একটি উত্তর যুক্ত করেছি যা সাধারণ-উদ্দেশ্য থেকে বাকি থাকাকালীন 'ফিল্টারিং পঠনযোগ্য তবে কার্যকরকরণযোগ্য ডিরেক্টরিগুলি নয়' সম্পর্কিত নির্দিষ্ট ইস্যুটিকে সম্বোধন করে।
wjordan

2

আপনি গ্রেপ-ভি ইনভার্ট-ম্যাচ ব্যবহার করতে পারেন

-v, --invert-match        select non-matching lines

এটার মত:

find . > files_and_folders
cat files_and_folders | grep -v "permission denied" > files_and_folders

যাদু করা উচিত


2

- = ম্যাকোসের জন্য = -

ওরফে ব্যবহার করে একটি নতুন কমান্ড তৈরি করুন: কেবল ~ / .bash_profile লাইনে যুক্ত করুন:

alias search='find / -name $file 2>/dev/null'

এবং নতুন টার্মিনাল উইন্ডোতে আপনি এটি কল করতে পারেন:

$ file=<filename or mask>; search

উদাহরণ স্বরূপ:

$ ফাইল = ইত্যাদি; অনুসন্ধান


1

আপনি যদি সিএসএইচ বা টিসিএসএইচ ব্যবহার করে থাকেন তবে এখানে একটি সমাধান দেওয়া হয়েছে:

( find . > files_and_folders ) >& /dev/null

আপনি যদি টার্মিনালে আউটপুট চান:

( find . > /dev/tty ) >& /dev/null

যাইহোক, "সিএসএইচ-কেন নয়" এফএকিউ বর্ণনা করে, আপনার সিএসএইচ ব্যবহার করা উচিত নয়।


আমি সমস্ত txt ফাইল গ্রেপ করতে এবং লুকানো ফাইল / ডিরেক্টরি বাদ দিতে চাই, "অনুমতি প্রত্যাখ্যান" বার্তা মুদ্রণের জন্য বাদ দিতে চাই। আমি csh শেল ব্যবহার করছি। আমি নীচে কমান্ড ব্যবহার করেছি এবং তারা সন্ধানের কাজ করছে না। -type f -iname " .txt" -নাট -পথ '* / \ \ '| egrep -v "অনুমতি প্রত্যাখ্যান" অনুসন্ধান find -type f -iname " .txt" -নাট -পথ '* / \ \ '2> / dev / নাল ত্রুটির নীচে পাওয়া। সন্ধান করুন: পাথ অবশ্যই প্রকাশের পূর্বে থাকতে হবে: 2 ব্যবহার: সন্ধান করুন [-H] [-L] [-পি] [-ল্যাভেল] [-ডি সহায়তা | গাছ | অনুসন্ধান | স্ট্যাটাস | হারসমূহ | অপট | এক্সিকিউট] [পাথ ...] [অভিব্যক্তি]
ইয়াদভ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.