मुझे एक पूरी निर्देशिका का उपयोग करके परिवर्तित करना होगा dos2unix। मैं यह पता लगाने में सक्षम नहीं हूं कि यह कैसे करना है।
मुझे एक पूरी निर्देशिका का उपयोग करके परिवर्तित करना होगा dos2unix। मैं यह पता लगाने में सक्षम नहीं हूं कि यह कैसे करना है।
जवाबों:
find . -type f -print0 | xargs -0 dos2unix
वर्तमान निर्देशिका के अंदर सभी फ़ाइलों को पुन: खोज लेंगे और इन फ़ाइलों के लिए कॉल करेंगे dos2unix कमांड
\;; echo Hello
findमंगलाचरण यह जांच नहीं करता है (हालांकि यह जोड़ना आसान होगा), लेकिन आधुनिक dos2unixसही ढंग से द्विआधारी फ़ाइलों को छोड़ देता है।
यदि यह एक बड़ी निर्देशिका है, तो आप कई प्रोसेसर के साथ चलने पर विचार कर सकते हैं:
find . -type f -print0 | xargs -0 -n 1 -P 4 dos2unix
यह एक बार में 1 फ़ाइल पास करेगा, और 4 प्रोसेसर का उपयोग करेगा।
nपरिमाण या दो के क्रम से
जैसा कि मैं dos2unix द्वारा खराब रूप से संतुष्ट होने के लिए हुआ, मैंने अपनी सरल उपयोगिता को रोल आउट किया। गति और पूर्वानुमेयता में कुछ लाभों के अलावा, वाक्यविन्यास भी थोड़ा सरल है:
endlines unix *
और अगर आप चाहते हैं कि यह उपनिर्देशिकाओं (छिपी हुई डायरियों और गैर-पाठ फ़ाइलों को छोड़ दे) में चला जाए:
endlines unix -r .
endlinesयहाँ उपलब्ध है https://github.com/mdolidon/endlines
dos2unix? वास्तव में जिज्ञासु।
dos2unixअलग-अलग क्षमता के टन होते हैं , (उदाहरण के लिए कुछ यूटीएफ 32 पढ़ते हैं, जबकि कुछ खोते हैं; एंडलाइन्स ऐसा नहीं करता है)। केवल एक ही है endlines, जो क्षमताओं को अच्छी तरह से जाना जाता है। इनपुट पर 2 / उदार, सभी नहीं dos2unixहैं। 3 / कुशल फाइल ट्री एक्सप्लोरेशन, जिसे हजारों फाइलों के लिए तेज और व्यावहारिक बनाया गया है। 4 / OSX पर बॉक्स से बाहर चलाता है - जो कम महत्वपूर्ण है कि ब्रू पैकेज मौजूद है।
संभवतः छुपी हुई फ़ाइलों और फ़ोल्डरों को छोड़ना सबसे अच्छा है, जैसे कि .git.उपयोग करने के बजाय find, यदि आपका bashसंस्करण हाल ही में पर्याप्त है या यदि आप उपयोग कर रहे हैं zsh, तो बस करें:
dos2unix **
ध्यान दें कि बैश के लिए, इसकी आवश्यकता होगी:
shopt -s globstar
.... लेकिन यह एक उपयोगी पर्याप्त सुविधा है जिसे आपको ईमानदारी से इसे .bashrcवैसे भी अपने जीवन में रखना चाहिए ।
यदि आप छिपी हुई फ़ाइलों और फ़ोल्डरों को छोड़ना नहीं चाहते हैं, लेकिन आप अभी भी गड़बड़ नहीं करना चाहते हैं find(और मैं आपको दोष नहीं दूंगा), तो आप केवल छिपी हुई प्रविष्टियों से मिलान करने के लिए दूसरा पुनरावर्ती-ग्लोब तर्क प्रदान कर सकते हैं :
dos2unix ** **/.*
ध्यान दें कि दोनों मामलों में, ग्लोब का विस्तार निर्देशिकाओं को शामिल करने के लिए किया जाएगा, इसलिए आपको निम्नलिखित चेतावनी दिखाई देगी (संभावित रूप से कई बार): Skipping <dir>, not a regular file.
dos2unixउपनाम हैं जो प्रभावित कर रहे हैं कि कैसे तर्कों का विस्तार किया जाता है। type dos2unixआपके सिस्टम पर आउटपुट क्या है ?
**बजाय find"इस तरह के रूप में छिपा फ़ाइलों और फ़ोल्डरों, को छोड़ करने के लिए है .git"। dos2unixछिपी हुई फ़ाइलों को कभी नहीं देखता, क्योंकि **उन्हें दिखाने के लिए विस्तार नहीं होता है। यदि आप चाहते हैं स्वचालित रूप से चलाने के लिए dos2unixछिपा फ़ाइलों और फ़ोल्डरों पर, आप उपयोग कर सकते हैं findया विस्तार होगा ही छिपा फ़ाइलों और फ़ोल्डरों, सहित (रूट निर्देशिका), वर्तमान फ़ोल्डर में (मूल dir), और किसी भी अन्य छिपा प्रविष्टियों। dos2unix ** **/.***/.*...
dos2unixकेवल प्रिंट Skipping <dir>, not a regular file.होता है, इसलिए चालू है ..और .सुरक्षित है।) इसके अतिरिक्त, lsग्लोब के साथ संयोजन यह जांचने का एक अच्छा तरीका नहीं है कि ग्लोब का विस्तार कैसे किया जाता है; echoइसके बजाय उपयोग करें : से प्राप्त होने echo **वाले तर्कों को मुद्रित करेगा । dos2unixdos2unix **
**निहित है, और इसका उपयोग echoस्पष्ट करता है।
एक सामान्य उपयोग का मामला एक गिट रिपॉजिटरी के लिए प्रतिबद्ध सभी फाइलों के लिए लाइन एंडिंग को मानकीकृत करता प्रतीत होता है :
git ls-files | xargs dos2unix
ध्यान रखें कि कुछ फ़ाइलों (जैसे *.sln, *.bat) आदि कर रहे हैं केवल विंडोज ऑपरेटिंग सिस्टम पर इस्तेमाल किया और चाहिए रखने केCRLF समाप्त होने के:
git ls-files '*.sln' '*.bat' | xargs unix2dos
यदि आवश्यक हो, का उपयोग करें .gitattributes
किसी भी Solaris उपयोगकर्ताओं के लिए (5.10 का उपयोग कर रहा है, नए संस्करणों पर भी लागू हो सकता है, साथ ही साथ अन्य यूनिक्स सिस्टम):
dos2unix फ़ाइल को अधिलेखित करने के लिए डिफ़ॉल्ट नहीं है, यह केवल अपडेट किए गए संस्करण को stdout में प्रिंट करेगा, इसलिए आपको स्रोत और लक्ष्य निर्दिष्ट करना होगा, अर्थात एक ही नाम दो बार:
find . -type f -exec dos2unix {} {} \;
for FILE in /var/www/html/files/*
do
/usr/bin/dos2unix FILE
done
मैंने इसे एक लाख बार देखा है, इसलिए मेरा समाधान है कि इस बैश समारोह को अपने परिवेश में रखें।
.bashrcया .profileजो भी हो
dos2unixd() {
find $1 -type f -print0 | xargs -0 dos2unix
}
प्रयोग
$ dos2unixd ./somepath
इस तरह आपके पास अभी भी मूल कमांड है dos2unixऔर इसे याद रखना आसान है dos2unixd।
यदि कोई उप-निर्देशिका नहीं है, तो आप भी ले सकते हैं
ls | xargs -I {} dos2unix "{}"
dos2unix *तो सरल है और वास्तव में इससे अधिक मजबूत होगा। (यह आम तौर पर के आउटपुट को पाइप करने के लिए अनुशंसित नहीं है ls, क्योंकि यह एक स्वरूपण उपकरण है और *प्रोग्रामेटिक उपयोग के लिए अधिक विश्वसनीय है।)
find . -type f -print0 | xargs -0 dos2unixमेरे विचार से समस्या का समाधान होगा।