कभी भी ls के आउटपुट को पार्स न करें
मेरा सुझाव है कि ls [ 1 ] के आउटपुट को पार्स करने से बचें , भले ही del
कमांड के साथ संयोजन में । यह कई कारणों से मुख्य रूप से अप्रत्याशित और सामान्य रूप से संबंधित नहीं है जो फ़ाइल नाम में अनुमत हैं।
यहां तक कि जब आपको उम्मीद करनी चाहिए कि लिनक्स पैकेज से संबंधित फाइलनाम "अच्छा व्यवहार करेंगे " , तो यह समस्या फिर भी दिखाई दे सकती है यदि अन्य फाइलें उसी निर्देशिका में मौजूद हैं, लेकिन आपको पता नहीं था या नोटिस नहीं किया गया था।
इसका उपयोग करना बेहतर है find
, टैब विस्तार (नाम और प्रेस लिखना शुरू करें Tab), फ़ाइल नाम विस्तार [ 2 ] के रूप में *MyKey*
...
एक तेज़ समाधान
चूंकि आप सभी पैकेजों का चयन करना चाहते हैं (जो कि "google" के.deb
साथ समाप्त होते हैं ) आप वाइल्डकार्ड के साथ अपना अनुरोध बना सकते हैं और एक सरल काम कर सकते हैं*
*google*.deb
rm -i *google*.deb
जो मध्य में "google" के साथ प्रत्येक फ़ाइल नाम का चयन करेगा जो वर्तमान निर्देशिका में वर्तमान के लिए समाप्त होगा । विकल्प (इंटरैक्टिव) पुष्टिकरण के लिए संकेत देगा, एक अच्छी आदत जब आप पैरामीटर विस्तार के साथ फाइलें हटाते हैं।.deb
-i
आपके प्रयास के दर्शन के करीब एक समाधान
यदि आपका उद्देश्य टुकड़ा के बाद अपने कमांडलाइन टुकड़े का निर्माण करना है, तो आपने किया है ls
, बाद में ls | grep google
, और केवल अपने आउटपुट की जांच करने के बाद आप इसे सब-सब्मिट के $(...)
साथ निष्पादित कर सकते हैं
rm -i $(ls | grep google)
एक तेज और खतरनाक तरीका [ 3 ] , का उपयोग करना है!!
ls | grep google
rm -i $(!!)
जो आपके इतिहास में समाप्त हुई अंतिम कमांड को निष्पादित करेगा । आप खुद को इस तथ्य से बचा सकते हैं कि आपके पास उस पंक्ति का कोई दृश्य नियंत्रण नहीं है जिसे आप निष्पादित करने जा रहे हैं यदि आपने पहले शेल विकल्पों को सक्षम histverify
किया है shopt -s histverify
।
rm -i *chrome*.deb