প্যাটার্নের সাথে মিলে থাকা ফাইলগুলি মুছতে ফাইন্ড কমান্ড কীভাবে ব্যবহার করবেন?


17

আমি একটি বাশ কমান্ড লেখার চেষ্টা করছি যা একটি নির্দিষ্ট প্যাটার্নের সাথে মেলে সমস্ত ফাইল মুছে ফেলবে - এক্ষেত্রে এটি সমস্ত পুরানো ভিএমওয়্যার লগ ফাইলগুলিই নির্মিত হয়েছে যা তৈরি হয়েছে।

আমি এই আদেশটি চেষ্টা করেছি:

find . -name vmware-*.log | xargs rm

যাইহোক, আমি যখন কমান্ডটি চালাচ্ছি, এটি ফোল্ডারের সমস্তটিতে চিপ আপ হয়ে যায় যার নামে ফাঁক রয়েছে। ফাইল পাথের বিন্যাস করার কোনও উপায় আছে যাতে xargs এটিকে উদ্ধার করে বা যথাযথভাবে পালাতে পারে?


উত্তর:


20

আমি সাধারণত দেখতে পেলাম যে সহজ এবং কম বিভ্রান্তির -execবিকল্পটি ব্যবহার findকরা using এটা চেষ্টা কর:

find . -name vmware-*.log -exec rm -i {} \;

এর পরে সমস্ত কিছু -execপ্রতিটি ফলাফলের জন্য চালানোর জন্য আদেশ হিসাবে নেওয়া হয় ;, যা এখানে পালিয়ে যায় যাতে এটি পাস হয়ে যায় find{}ফাইলের নাম দিয়ে প্রতিস্থাপিত হয় findস্বাভাবিকভাবে প্রিন্ট হবে।

একবার যাচাই হয়ে গেলে এটি যা চায় তা করে, আপনি এটি সরাতে পারেন -i


1
এছাড়াও, যদি এটি কেবল ফাইলগুলি মুছতে চান এবং ডিরেক্টরি নয় তবে আপনি অনুসন্ধান কমান্ডে '' -type f '' যুক্ত করতে পারেন।
জেমস হান্নাহ

18

আপনার যদি জিএনইউ থাকে তবে findআপনি -deleteবিকল্পটি ব্যবহার করতে পারেন :

find . -name "vmware-*.log" -delete

xargsফাইলের নামগুলির ফাঁকা জায়গাগুলি নিয়ে সমস্যাটি ব্যবহার এবং এড়াতে:

find . -name vmware-*.log -print0 | xargs -0 rm

তবে আপনার লগ ফাইলগুলির নামে ফাঁকা স্থান থাকা উচিত নয়। ওয়ার্ড প্রসেসিং ডকুমেন্টস এবং এমপি 3 ফাইলগুলিতে এগুলি সম্ভবত রয়েছে তবে আপনি আপনার লগ ফাইলগুলির নাম নিয়ন্ত্রণ করতে সক্ষম হবেন।


যে ঝরঝরে. আমি এটা সম্পর্কে জানতাম না।
জেফ স্নাইডার

8

আপনি findNULL গুলি সহ আউটপুট তালিকাটি সীমিত xargsকরতে এবং তার ইনপুট তালিকাটি একই পেতে বলতে পারেন:

$ ls -l "file 1" "file 2"
-rw-r--r-- 1 james james 0 Oct 19 13:28 file 1
-rw-r--r-- 1 james james 0 Oct 19 13:28 file 2

$ find . -name 'file *' -print0 | xargs -0 ls -l
-rw-r--r-- 1 james james 0 Oct 19 13:28 ./file 1
-rw-r--r-- 1 james james 0 Oct 19 13:28 ./file 2

$ find . -name 'file *' -print0 | xargs -0 rm -v
removed `./file 2'
removed `./file 1'

এছাড়াও, নিশ্চিত হয়ে নিন যে আপনি *কোনও ব্যাকস্ল্যাশ দিয়ে বা vmware-*.logএকক উদ্ধৃতি যুক্ত করে পালিয়ে গেছেন, অন্যথায় আপনার শেলটি এটি ছাড়ার আগে এটি প্রসারিত করার চেষ্টা করতে পারে find


6

অনুসন্ধানের বিকল্পটি ভুলে যাবেন না -delete। এটি বিশেষ অক্ষরগুলির সাথে ত্রুটি ছাড়াই ফাইলটি সরিয়ে দেয় ...

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