मैंने दौड़ने की कोशिश की
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'।
यह xargsनहीं हैxarg
आदेश 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