यह शेल है जो वाइल्डकार्ड का विस्तार करता है, न कि आज्ञाओं का। इसलिए cp dir1/* dir2/*
पहले दो वाइल्डकार्ड का विस्तार करें, फिर cp
परिणाम पर कॉल करें। यह बिल्कुल नहीं है जो आप स्पष्ट रूप से उम्मीद करते हैं: इस बात पर निर्भर करता है कि पहले से कितनी फाइलें हैं dir2
, dir2/*
एक या अधिक तर्क तक विस्तारित हो सकती हैं। कमांड को cp
यह नहीं पता है कि इसके कौन से तर्क पहले पैटर्न के विस्तार से आए थे और कौन से दूसरे पैटर्न के विस्तार से आए थे। यह अपने अंतिम तर्क को गंतव्य निर्देशिका का नाम होने की उम्मीद करता है। इस प्रकार, डायरेक्टरी से डायरेक्टरी dir1
में सभी फाइलों को कॉपी करने के लिए dir2
, अंतिम तर्क डायरेक्टरी होना चाहिए dir2
:
cp dir1/* dir2
चूंकि *
सभी फ़ाइलों से मेल खाता है, सभी फ़ाइलों cp
को कॉपी करने का प्रयास करता है। इसमें निर्देशिकाएँ शामिल हैं: निर्देशिकाएँ फ़ाइलें भी हैं। यह निर्देशिकाओं को छोड़ देता है, लेकिन एक त्रुटि की रिपोर्ट करता है। यह विशेष फ़ाइलों की सामग्री को कॉपी करता है जैसे नामित पाइप (कुछ उनके लिए बेहतर लिख रहा था, या cp
ब्लॉक करेगा), आदि।
केवल नियमित फ़ाइलों की प्रतिलिपि बनाने के लिए , आपको मिलान को प्रतिबंधित करना होगा। Zsh में, आप उसके लिए ग्लोब क्वालिफायर का उपयोग कर सकते हैं .
:
cp dir1/*(.) dir2
अन्य गोले में यह नहीं है। आप find
फ़ाइल प्रकारों को फ़िल्टर करने के लिए कमांड का उपयोग कर सकते हैं । यह मानते हुए कि आप गैर-एम्बेडेड लिनक्स या साइगविन चला रहे हैं:
find dir1 -maxdepth 1 -type f -exec cp -t dir2 {} +
लिनक्स पर, FreeBSD और OSX:
find dir1 -maxdepth 1 -type f | xargs -I {} cp {} dir2