কোনও ফাইল অনুপস্থিত থাকার পরে কি আরএম রিপোর্ট করবেন না?


38

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

পর্যায়ক্রমে, কম কোলাহলকারী ফাইলটি সরানোর জন্য আরও ভাল কমান্ড ব্যবহার করার কি নেই?

উত্তর:


65

-fবিকল্পটি ব্যবহার করুন । এটি নিঃশব্দে অস্তিত্বহীন ফাইলগুলিকে উপেক্ষা করবে।

থেকে man rm:

   -f, --force
          ignore nonexistent files and arguments, never prompt

["কখনই প্রম্পট" অংশটির অর্থ হ'ল (ক) -fপূর্বনির্ধারিত কোনও -iবা -Iবিকল্পকে ওভাররাইড করে এবং (খ) রাইট-সুরক্ষিত ফাইলগুলি জিজ্ঞাসা না করে মুছে ফেলা হবে]]

উদাহরণ

ছাড়া -f, rmফাইল হারিয়ে যাওয়া সম্পর্কে অভিযোগ করবে:

$ rm nonesuch
rm: cannot remove ‘nonesuch’: No such file or directory

সহ -f, এটি নিরব থাকবে:

$ rm -f nonesuch
$

4
ওহ, আমি নতুন যা অপসারণের জন্য প্রম্পট করিনি, বুঝতে পারিনি যে এটি অযৌক্তিক বিষয়গুলিও উপেক্ষা করেছে। মানুষের দিকে তাকিয়ে আমি পুরোপুরি এড়িয়ে গেলাম। :-) ধন্যবাদ. আমি অনুমতি হিসাবে এটি উত্তর হিসাবে চিহ্নিত করব।
ফ্লিকফ্লিফ্লি

9

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

# rest of script
# ...
[ -e "$file" ] && rm "$file"
# ...
# rest of script

rm -fউদাহরণস্বরূপ, ব্যবহারকারী-লেখার অনুমতি নেই এমন একটি ফাইলে কল করা ফাইলটি সরিয়ে ফেলবে এবং সেই দৃশ্যের জন্য স্বাভাবিক প্রম্পটটিও নির্গত করবে না।

আপনি যদি একাধিক ফাইলের সাথে একই ধারণাটি ব্যবহার করতে চেয়েছিলেন তবে আমি একটি ফাংশন সংজ্ঞা তৈরি করব, যেমন:

qrm() {
  for f
  do
    [ -e "$f" ] && rm "$f"
  done
}

এটি ব্যবহার করুন: qrm file1 file2-does-not-exist *.txt etc here


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

7

আপনি বলেছিলেন যে rmকমান্ডটি চালানোর পরে আপনি অন্য আউটপুটটি দেখতে চান তবে -fঅপশনটি ব্যবহার করলে সেগুলি দমন করা হবে। আপনি যা চান তার জন্য আপনাকে STDERR ফিল্টার করতে হবে, যা কিছুটা জটিল, আপনি অন্য সমস্ত কিছু দেখানোর জন্য চান।

আপনি এটির মতো একটি আদেশ ব্যবহার করতে চাইবেন:

rm -f filename 3>&1 1>&2 2>&3 3>&- | grep -v 'No such file or directory'

কমান্ড ব্যাখ্যা করেছেন:

  • -f যুক্তি হ'ল জোর করা এবং নিশ্চিতকরণ বা ত্রুটির জন্য প্রম্পট না করা
  • 3>&1 1>&2 2>&3 3>&-(আপনি যদি এই সম্বন্ধে আরও পড়তে পারেন ফিল্টারিং জন্য stdout- এ এবং stderr প্রায় স্যুইচ করতে হয় এখানে যদি চেয়েছিলেন
  • | grep -v 'No such file or directory' আপনি দেখতে চান না এমন বার্তাটি ফিল্টার করছে

এখন, আপনি যদি কেবল ত্রুটি বার্তাগুলি পুরোপুরি দমন করতে চান, আপনি নিম্নলিখিত কমান্ডটি চালাতে পারেন:

rm filename 2> /dev/null

এই কমান্ডটি STDERR কে / dev / null এ পুনঃনির্দেশ করে যাতে আপনি কমান্ডটি চালানোর সময় এটি দেখতে পাবেন না।


1
(এএএফআইসিএস) কখনও স্টাডাউটের আউটপুট rmছাড়াই -v, কেবল স্টাডারই না হয়, সুতরাং 2>&1 | grepএক্ষেত্রে আপনি কেবল নাচটি ছাড়াই ব্যবহার করতে পারেন যা সাধারণভাবে দরকারী,
dave_thompson_085

4

বিকল্প হিসাবে, আপনি বিকল্পটি findদিয়ে কমান্ডটি ব্যবহার করতে পারেন -delete। এটি (স্পষ্টতই) এটির সন্ধানকারী ফাইলগুলি মুছবে তাই এটি যদি কখনও না থাকে তবে সতর্ক করে না। একটি উদাহরণ হতে পারে:

find /var/log/triffids/ -name "*.log" -mtime 30 -delete

যা /var/log/triffids/ডিরেক্টরিটি অনুসন্ধান করবে এবং .logপ্রত্যয় সহ সমস্ত ফাইল মুছে ফেলবে যা ৩০ দিনের বেশি পরিবর্তিত হয়নি।

এটা সবসময় এই কমান্ড চালানোর জন্য একটি ভাল ধারণা ছাড়া-delete প্রথম বিকল্প, নিশ্চিত করুন ফাইল আশা খোঁজার এর করা।


আমি এই বিকল্পটি পছন্দ করি এবং একটি পরিবর্তন বিবেচনা করব। এটি ভাগ করে নেওয়ার জন্য ধন্যবাদ।
ফ্লিকফ্লিফলি

3

এর --force( -f) বিকল্পটি পরীক্ষা করুন rm:

-ফ, - ফোর্স

অস্তিত্বহীন ফাইল এবং যুক্তি উপেক্ষা করুন, কখনও প্রম্পট করবেন না


2

এটি হ্যাক, তবে আপনি touchফাইলটি সর্বদা সরিয়ে ফেলতে পারেন। যদি এটি বিদ্যমান না থাকে তবে এটি তৈরি করা হবে তাই rmএটি মুছে ফেলতে পারে।


আমি এটি পছন্দ করি, পারফরম্যান্স বাদে - কেবলমাত্র অস্তিত্বগুলি মুছে ফেলার বিপরীতে বেশ কয়েকটি কে-র ফাইল ছোঁয়া কত ব্যয়বহুল?
দানি_ল

0

-fম্যান পৃষ্ঠা অনুসারে আপনি এটি যেমনটি ব্যবহার করতে পারেন :

ফাইলের অনুমতি নির্বিশেষে নিশ্চিতকরণের জন্য অনুরোধ না করে ফাইলগুলি সরিয়ে ফেলার চেষ্টা করুন। যদি ফাইলটি বিদ্যমান না থাকে তবে ডায়গনিস্টিক বার্তা প্রদর্শন করবেন না বা একটি ত্রুটি প্রতিফলিত করতে প্রস্থান স্থিতিটি পরিবর্তন করবেন না। এছাড়াও মনে রাখবেন -f বিকল্পটি পূর্ববর্তী -i বিকল্পগুলিকে ওভাররাইড করে।

rm -f xyz-directory

আপনাকে কিছু জিজ্ঞাসা করবে না এবং আপনি যা চান ঠিক তা করবে।


-1

দুটি প্রধান উপায় আছে: আপনি যদি -f বিকল্পটি যুক্ত করেন তবে এটি "অস্তিত্বের" ত্রুটিটি প্রদর্শন করবে না এবং দুটি: (প্রায় কোনও কমান্ডের জন্য কাজ করে) কেবল "thecommand" do "thecommand 2> / dev না করে / নাল "যেখানে" কমান্ড "হ'ল আদেশটি আপনি করছেন।


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