नहीं।
cpआदेश नियमित अभिव्यक्ति के रूप में अपने तर्कों के किसी भी कार्रवाई करने के लिए क्षमता के अधिकारी नहीं है। यहां तक कि वाइल्डकार्ड इसे (या अधिकांश निष्पादन योग्य) द्वारा नियंत्रित नहीं किया जाता है; बल्कि वे खोल द्वारा नियंत्रित किए जाते हैं।
cp test/* test2/वास्तव में बैश द्वारा विस्तारित किया जाता है, और जो cpवास्तव में इसके तर्कों के लिए देखता है cp test/file1 test/file2 test/file3 test2/(या जो भी वास्तविक सामग्री के आधार पर उपयुक्त है test/)।
इसके अलावा, मुझे नहीं लगता कि आपकी अभिव्यक्ति, [^\.php]जो आप चाहते हैं उससे मेल खाएगी (यह केवल उन फ़ाइलों से मेल नहीं खाती है जिनमें शामिल हैं .php)।
आप शायद findनियमित अभिव्यक्ति पर आधारित फ़ाइलों की सूची को फ़िल्टर करने के लिए उपयोगिता पर ध्यान देना चाहते हैं , और फिर कमांड xargsमें लौटी हुई फ़ाइल सूची को लागू करने के लिए उपयोग करते हैं cp(मान लें कि फ़ाइलों की प्रतिलिपि बनाने के लिए एक अंतर्निहित हैंडलर नहीं है, मैं? ' उपकरण से परिचित नहीं हूं)।
आप कोशिश कर सकते हैं:
find . ! -iregex ".*\.php.*" -exec cp {} /destination/folder/ \;
यह वर्तमान निर्देशिका को उन फ़ाइलों के लिए पुन: खोज करने के लिए कहता है, जिनमें पथ में ".php" नहीं है और उन्हें कॉपी करें /destination/folder/।
जैसा कि अनुरोध किया गया है, तर्कों का एक अधिक विशिष्ट उल्लंघन:
. - खोज शुरू करने का स्थान - इस मामले में, वर्तमान निर्देशिका
! - "नहीं" ऑपरेटर, अगले परीक्षण के परिणाम को उल्टा करता है
-iregex- केस-असंवेदनशील नियमित अभिव्यक्ति परीक्षण। अगला तर्क अभिव्यक्ति है।
".*\.php.*"- नियमित अभिव्यक्ति मिलान <Anything>.php<Anything>- पथ में कहीं भी ".php" वाली कोई भी फ़ाइल। (नोट, एक फ़ोल्डर के अंदर होने सहित, जिसमें ".php" नाम है, आपको केवल फाइलों से मेल खाने के लिए अधिक जटिल अभिव्यक्ति की आवश्यकता होगी)
-exec- पूर्ववर्ती परीक्षण सही होने पर एक आदेश निष्पादित करें। अगला तर्क कमांड है, कमांड के लिए शेष सभी तर्क ;पारित किए जाते हैं। {}फ़ाइल नाम का प्रतिनिधित्व करने वाला एक विशेष तर्क है।
cp - कमांड जो find` पथ मिलान नामों में से प्रत्येक पर चलना चाहिए।
{}- जिस फाइल को पाया गया, वह cpएक तर्क के रूप में पारित हुई ताकि यह पता चले कि किस फाइल को कॉपी करना है
/destination/folder/- यह करने के लिए फ़ाइल को कॉपी करना चाहिए cp, cpयह बताते हुए तर्क पास हो गया।
\;- यह वह ;टर्मिनेटर है जिसकी -execतलाश की जा रही है। हम इसे इस तरह से बचते हैं \कि आपका खोल इसे पार्स करने की कोशिश नहीं करता है और इसके बजाय इसे कमांड को तर्क के रूप में खिलाता है ( find)
इसके बजाय एक नियमित अभिव्यक्ति लिखना मुश्किल है जो "स्ट्रिंग्स जो नहीं है .php" से मेल खाती है , इसलिए हम इसके बजाय findउन स्ट्रिंग्स की खोज करने के लिए कहते हैं जो इसमें शामिल हैं और फिर परिणामों के साथ उल्टा करते हैं ।.php!
find . -name [^\.php] -exec cp {} /path/to/location \;विशेष वर्ण वाली फ़ाइलों के लिए सावधान रहें।