আমি দৌড়ানোর চেষ্টা করেছি
locate *.orig | xargs rm
কিন্তু এটা বলেছে No such file or directory
আমি এটি করার উপায়গুলি দেখেছি find
কিন্তু এটি সনাক্ত করার জন্য অবজেক্টটির পুরো পথটি ফিরে আসে যাতে এটি সম্ভব হয়
আমি দৌড়ানোর চেষ্টা করেছি
locate *.orig | xargs rm
কিন্তু এটা বলেছে No such file or directory
আমি এটি করার উপায়গুলি দেখেছি find
কিন্তু এটি সনাক্ত করার জন্য অবজেক্টটির পুরো পথটি ফিরে আসে যাতে এটি সম্ভব হয়
উত্তর:
যদি ফাইলের নামগুলিতে স্পেস থাকে তবে আপনার ব্যবহার করা উচিত
locate -0 $something | xargs -0 rm
locate
ম্যান পৃষ্ঠা থেকে :
-0
,--null
পৃথক লাইনে প্রতিটি এন্ট্রি লেখার পরিবর্তে ASCII NUL অক্ষর ব্যবহার করে আউটপুট এন্ট্রি পৃথক করুন। এই বিকল্পটি GNU xargs (1) --null বিকল্পের সাথে আন্তঃব্যবহারের জন্য ডিজাইন করা হয়েছে।
অথবা
locate $something | while read f; do rm "$f"; done
এছাড়াও, *.orig
শেলের প্রসার এড়াতে আপনার উদ্ধৃতি দিয়ে সুরক্ষা দেওয়া উচিত এবং এটি কোনও অচিৎ সনাক্ত করতে পাস করা উচিত।
| while read
যেহেতু আমার হোম ডিরেক্টরিটি ফাঁকা জায়গায় ফাইলগুলি পূর্ণ।
*.orig
তবে শেলটি প্যাটার্নটি প্রসারিত করে বলে, file1.orig file2.orig ...
এটি locate
তার *.orig
মতো সঠিক স্ট্রিংটি দেখতে পাবে না ।
tr '\n' '\0'
।
কমান্ডটি locate *.orig | xargs rm
আসলে কাজ করে তবে যা হচ্ছিল তা হ'ল ট্র্যাশে থাকা ফাইলগুলিতে locate
সন্ধান *.orig
করা ছিল এবং ট্র্যাশের rm
ক্যানের No such file or directory
মধ্যে ফাইলগুলি মুছার চেষ্টা করার সময় ত্রুটিটি ছুঁড়ে ফেলা হয়েছিল।
সনাক্ত করা গ্লোব্বিং করে না, তবে শেলটি করে। শেলটি প্রসারণ করে * .orig যা বর্তমান ডিরেক্টরিতে এটি খুঁজে পায় যা * .orig এর সাথে মেলে।
শুধু ব্যবহার
locate .orig
এবং যদি এটি আপনার প্রয়োজন মতো হয়ে যায়
locate .orig | xargs rm
অথবা, এনজোটিব যেমন উল্লেখ করেছেন
locate -0 .orig | xargs -0 rm
যদি আপনার ফাইলনেমে সাদা অংশ থাকে।
একটি কৌশল: সমস্ত পাথ tmp ফাইলে সংরক্ষণ করুন। তারপরে, এটি লুপ করুন:
#!/bin/bash
locate .orig /tmp/tmp.txt
while read line
do
pth=$line
rm "$pth"
done < /tmp/tmp.txt
rm -rf /tmp/tmp.txt