ls | গ্রেপ | rm - এই কমান্ডটি ফর্ম্যাট করবেন কীভাবে?


11

আমি একটি নির্দিষ্ট ডিরেক্টরিতে (টার্মিনালটি ব্যবহার করে ম্যাক ওএস এক্সে) একগুচ্ছ ফাইল মুছতে চাইছি

ls | grep \([1-9]\) | xargs rm

কৌশলটি করা উচিত, কিন্তু তা হয় না। আমি ফাইলনামের (প্রথম থেকে ওয়েব থেকে ডুপ্লিকেট ডাউনলোড) একক অঙ্কের সাথে যে কোনও ফাইল মুছে ফেলার চেষ্টা করছি, তবে এটি এরকম কিছু করে শেষ করে:

> rm: 520syllabus2010: No such file or
> directory rm: (3).pdf: No such file or
> directory

কারণ এটি স্থানটি সঠিক ব্যাখ্যা করে না। এটি "520 সাইলাবাস2010 (3) .pdf" মুছে ফেলা উচিত

এটি করার সঠিক উপায় কী?

ধন্যবাদ, জেফ


1
আপনার উদাহরণস্বরূপ ফাইলের নামটিতে আক্ষরিক কিছু নেই #
বেনিয়ামিন বান্নিয়ার

1
@ হংক: তিনি আক্ষরিক খুঁজছেন না #
Ignacio Vazquez-Abram

1
শেল দ্বারা প্রসারণের কারণে, সিডাব্লুডিতে উদাহরণস্বরূপ কোনও ফাইল রয়েছে, তবে এটি প্রত্যাশার মতো কাজ করবে না (3)। আর্গুমেন্টগুলি উদ্ধৃত করা ভাল যাতে শেলটি তাদের প্রভাবিত করে না।
Ignacio Vazquez- আব্রামস

1
বিভাজক সমস্যার দ্বারা আপনি ক্ষতিগ্রস্থ
Ole Tange

উত্তর:


19

সংক্ষিপ্ত সংস্করণ:

rm *\([1-9]\)*

না নল কি lsকরতে xargs। পরিবর্তে, পাইপ find ... -print0থেকে xargs -0, যাতে এই জাতীয় সমস্যা এড়ানোর জন্য।

find . -maxdepth 1 -name '*([1-9])*' -print0 | xargs -0 rm

... যা লিখিত হতে পারে:

find . -maxdepth 1 -name '*([1-9])*' -exec rm {} \;

এবং:

find . -maxdepth 1 -name '*([1-9])*' -delete

যা কেবল rmএকটি ওয়াইল্ডকার্ডের সাহায্যে আরও ছোট করা যেতে পারে ।


সাধারণত lsএবং findনতুন xargsলাইনের সাথে পৃথক ফাইলের নাম পৃথক করা হয় তবে এটির ইনপুটটিকে নিউলাইন বা স্পেস দ্বারা বিভক্ত করে তোলে যার ফলে আপনি যে আচরণটি দেখেন তার ফলস্বরূপ।

এটা সম্ভব বলি xargsশুধুমাত্র সম্পর্কে newline দ্বারা বিভক্ত, কিন্তু ফাইল করতে তাদের নামে নতুন লাইন আছে। প্রকৃতপক্ষে, লিনাক্স এবং বিএসডি-তে কেবল নিষ্ক্রিয় চরিত্রটি হল "নাল" বা শূন্য বাইট - সুতরাং আপনার ক্ষেত্রে এগুলি ব্যবহার করা উচিত।

উদাহরণস্বরূপ 2 উদাহরণস্বরূপ, নাল বাইট সহ ফাইলের নাম পৃথক করতে -print0বলে find; একই জন্য xargs -0। (কয়েকটি অন্যান্য সরঞ্জামেরও অনুরূপ বিকল্প রয়েছে, যেমন sort -zবা or grep -zZ)

"সংক্ষিপ্ত সংস্করণ" একটি সাধারণ শেল ওয়াইল্ডকার্ড ব্যবহার করে ( bashম্যানুয়ালে "প্যাটার্ন" - বিভাগ "পাঠের নাম সম্প্রসারণ" দেখুন)।


1
এবং কেবল নিরাপদ থাকার জন্য, এটি ব্যবহার করা আরও ভাল *" "\\([1-9]\\).*যাতে প্যারেন্ড সংখ্যার আগে (ক, ফর্সা হওয়া) সময়ের পূর্বে কোনও স্থানের ফাইলগুলি মোছা হয়।
Ignacio Vazquez-Abram 20

এই বাক্যবিন্যাসের সাথে খুব বেশি পরিচিত নয়, তবে উত্সগুলির উপর ভিত্তি করে আমি এটিকে চেষ্টা করে দেখলাম এবং আপনি কী জানেন ... এটি কাজ করেছিল! ধন্যবাদ!
জেফ

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