ফাইল মুছে ফেলার আগে উপস্থিত রয়েছে কিনা তা যাচাই করা কি ভাল?


1

কখনও কখনও যখন আমি কোনও ফাইল মুছে ফেলতে চাই (স্ক্রিপ্টের মধ্যে থেকে), আমি এটি উপস্থিত আছে কিনা তা পরীক্ষা করে না করে কেবল মুছে ফেলব। সুতরাং আমি এটি করি:

$ rm "temp.txt" 2>/dev/null

এটার পরিবর্তে:

[ -f "temp.txt" ] && rm "temp.txt"

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

সুতরাং, সম্ভবত এটি প্রথম উপায়ে করা দ্রুততর, বিশেষত বেশিরভাগ সময় যদি ফাইল উপস্থিত থাকার সম্ভাবনা থাকে।

এটি এক উপায়ে বা অন্যভাবে করার জন্য অন্য কোনও সুবিধা (বা ডাউনসাইড) রয়েছে?

এটা কি আরও দ্রুত হবে ভেবে আমি কি ভুল করছি?


চেকের সময় ফাইলটি উপস্থিত থাকার সম্ভাবনাটির জন্য আপনাকে এখনও প্রস্তুত থাকতে হবে তবে আনলিংক সিস্টেম কল করার সময় আর উপস্থিত নেই। এটি অসম্ভব, তবে এটি ঘটলে আপনার সম্পূর্ণ ব্যর্থ হওয়া উচিত নয়।
একটি সিভিএন

rm কেবল 'প্রয়োজন' -f কারণ এটির আরএম -i এর এলিয়াসেট থাকে। যদি আমি rm 2> / dev / nul করি এবং ফাইলটি উপস্থিত থাকে, তবে প্রম্পটে ফিরে যাওয়ার জন্য আমার অতিরিক্ত গাড়ী চালানো দরকার। এবং [ -f "temp.txt" ] && rm "temp.txt"মানে কি? আমি মনে করি আপনার অর্থ rm -f শুধু -f নয়। আর দুবার কেন আরএম। আপনি কি পাচ্ছেন তা আমি দেখতে পাচ্ছি না। এবং * নিক্সে আমি ভেবেছিলাম এটি একক উদ্ধৃতিগুলি ডাবল কোট নয়, যদিও আমি ডাবল উদ্ধৃতিগুলি (নপপিক্সে পরীক্ষিত) দেখছি।
বার্লোপ

@ বারলপ - ১) আমার rmসাথে কোনও বিকল্প নেই rm -i, সুতরাং আরএম প্রম্পটটি খারিজ করার জন্য একটি "এন্টার" দরকার হয় না। 2) rmপ্রতিটি ক্ষেত্রে আমার কেবল 1 জন রয়েছে, সুতরাং আপনি rmদুবার ব্যবহারের অর্থ কী তা আমি জানি না । 3) [ -f "temp.txt" ] && rm "temp.txt"শুধুমাত্র rmফাইল উপস্থিত থাকলে চালানো হয় , আমি এর মানে না [ rm -f "temp.txt" ] &&...। ৪) ডাবল-কোটস ... আমি সবসময় ফাইলের নাম উদ্ধৃত করার জন্য ডাবল-কোট ("...") ব্যবহার করার অভ্যাসে থাকি কারণ ফাইলের নামগুলিতে এক বা একাধিক এমবেডেড অ্যাডোস্ট্রোফ (') থাকতে পারে। এই উদাহরণে, আমি হয় ব্যবহার করতে পারে।
কেভিন ফেগান

@ মাইকেলKjörling - আমার নিখোঁজ ধরা পড়ার জন্য ধন্যবাদ &&। আমি নিশ্চিত আমি যখন এটি লিখছিলাম তখন এটি ছিল তবে আমি অবশ্যই পোস্ট করার আগে এটি কোনওভাবে হারিয়ে ফেলেছি।
কেভিন ফেগান

@ বারলপটি [সাধারণত (বা এর সমতুল্য) এর একটি সিমিলিংক হয় test, সুতরাং [ -f x ]এর সমতুল্য হয় test -f x ]এবং চূড়ান্ত ]উপেক্ষা করা হয়। সুতরাং একই কমান্ডটি লেখা যেতে পারেtest -f "temp.txt" && rm "temp.txt"
একটি সিভিএন

উত্তর:


2

কেন না?

$ rm -f "temp.txt"

সুতরাং আপনাকে পরীক্ষা করতে হবে না বা ত্রুটি আউটপুট পুনর্নির্দেশ করতে হবে না।


1

সত্যিই দুটি মামলা আছে:

  • অপসারণের ফাইলটির উপস্থিতি প্রত্যাশিত। এই পরিস্থিতিতে স্ক্রিপ্টের ত্রুটিটিকে উপেক্ষা করা উচিত নয় তবে পরিস্থিতিটি যথাযথভাবে পরিচালনা করা উচিত। উদাহরণস্বরূপ, ফাইল সিস্টেমটি যেখানে ফাইল তৈরি করতে হবে সেগুলি পূর্ণ বা ফাইলটি ক্র্যাশ করে দেওয়ার প্রক্রিয়াটি সম্পন্ন হয়েছে বা যা কিছু।

  • অপসারণের জন্য ফাইলটি উপস্থিত থাকতে পারে এবং নাও থাকতে পারে, সেক্ষেত্রে এর অস্তিত্বের পরীক্ষা করার কোনও বিন্দু নেই।


আপনি লিখুন "স্ক্রিপ্টটি ত্রুটিটিকে উপেক্ষা করে এটিকে সঠিকভাবে পরিচালনা করা উচিত নয়।" <- আপনি কি বোঝাতে চেয়েছেন যে স্ক্রিপ্টটি ত্রুটিটিকে উপেক্ষা করা উচিত নয় এবং এটি সঠিকভাবে পরিচালনা করা উচিত?
বার্লোপ

@ বার্লপ বাক্যটি স্পষ্ট করতে পুনরায় প্রতিবিম্বিত হয়েছে।
jlliagre

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