पार्स ls
या पाइप करना सुरक्षित नहीं है find
[ 1 , 2 ]
यह (और पाइप के लिए) पार्स करने के लिए सुरक्षित के उत्पादन में नहीं है ls
या find
जिसका मुख्य कारण यह संभव खोजने के लिए, फ़ाइल नाम के रूप में गैर सामान्य पात्रों न्यू लाइन , टैब ... यहाँ एक शुद्ध खोल चक्र काम करेंगे [ cuonglm ] ।
यहां तक कि विकल्प के साथ पाइप नहीं किया गया find
कमांड काम करेगा:-exec
find ./*.png -exec basename {} .png \;
अपडेट / नोट्स : आप find .
छिपी हुई फ़ाइलों के लिए भी खोज करने के लिए उपयोग कर सकते हैं , या find ./*.png
केवल छिपे हुए नहीं प्राप्त करने के लिए। find *.png -exec ...
आपके पास उस स्थिति में समस्या हो सकती है जब वह नाम की एक फ़ाइल मौजूद थी .png
क्योंकि खोज उसे एक विकल्प के रूप में मिल जाएगी। आप के -maxdepth 0
रूप में नामित निर्देशिकाओं में उतरने से बचने के लिए जोड़ सकते हैं Dir_01.png
, या find ./*.png -prune -exec ...
जब maxdepth की अनुमति नहीं है (धन्यवाद स्टीफन)। यदि आप उन निर्देशिकाओं को सूचीबद्ध करने से बचना चाहते हैं जिन्हें आपको विकल्प जोड़ना चाहिए -type f
(जो अन्य प्रकार की गैर-नियमित फ़ाइलों को भी बाहर कर देगा)। man
सभी उपलब्ध विकल्पों के बारे में अधिक संपूर्ण पैनोरमा के लिए इसे एक नज़र दें , और बेहतर पोर्टेबिलिटी के लिए पॉज़िक्स कंप्लेंट होने पर जांचना याद रखें।
कुछ शब्द और
यह हो सकता है, उदाहरण के लिए, किसी दस्तावेज़ से शीर्षक की प्रतिलिपि बनाना और फ़ाइलनाम में चिपकाना, एक या एक से अधिक नई रेखा फ़ाइल नाम में ही समाप्त हो जाएगी। हम इतने अशुभ भी हो सकते हैं कि एक शीर्षक में वह कुंजी भी हो सकती है जिसका उपयोग हमें एक नई पंक्ति से ठीक पहले करना है:
The new art of working on .png
files and other formats.
यदि आप परीक्षण करना चाहते हैं, तो आप इस तरह से कमांड के साथ फाइल नाम बना सकते हैं
touch "A file with two lines"$'\n'"and This is the second.png"
touch "The new art of working on .png"$'\n'"files and other formats.png"
गैर प्रिंट करने योग्य पात्रों के बजाय सरल /bin/ls *png
आउटपुट होगा?
A file with two lines?and This is the second.png
The new art of working on .png?files and other formats.png
सभी मामलों जो आप करेंगे में में पाइप उत्पादन का ls
या find
निम्न आदेश को समझने के लिए करता है, तो वर्तमान लाइन एक नया से आता है कोई संकेत होगा फ़ाइल नाम या अगर यह एक प्रकार है न्यू लाइन मिसाल में चरित्र फ़ाइल नाम । एक बुरा नाम वास्तव में, लेकिन अभी भी एक कानूनी।
एक खोल पैरामीटर-विस्तार के साथ एक खोल चक्र, ${parameter%word}
, के साथ दोनों संस्करण में printf
या echo
काम करेंगे [ cuonglm ], [ Anthon1 ] ।
for f in *.png; do printf "%s\n" "${f%.png}" ; done
शेल पैरामीटर विस्तार के मैन पेज से [ 3 ]
$ {पैरामीटर% शब्द}
$ {पैरामीटर %% शब्द}
... विस्तार का परिणाम सबसे छोटे मिलान पैटर्न ('%' केस) या सबसे लंबे मिलान पैटर्न ('%%' केस) के साथ पैरामीटर का मान हटा दिया गया है।
.
उनमें शामिल हो सकते हैं या नहीं भी हो सकते हैं। हालांकि सम्मेलन के साथ अपनी फ़ाइलों को नाम देने का कहना है.png
अंत में, वहाँ कोई कारण नहीं क्यों मैं एक PNG फ़ाइल नामित नहीं हो सकता हैfoo.zip
याmy.picture.20160518
या बसmypic
।