2009-04-07 15 views
24

क्या किसी को विंडोज़ में एक तरीका (पावरहेल या एक उपकरण कहें) पता है जो किसी निर्देशिका पर पुनर्विचार कर सकता है और किसी भी यूनिक्स फ़ाइलों को विंडोज फाइलों में परिवर्तित कर सकता है।विंडोज़ न्यूलाइन (विंडोज़ पर) के लिए यूनिक्स न्यूलाइनें

पावरहेल में कम से कम एक यूनिक्स फ़ाइल का पता लगाने के लिए मैं पूरी तरह से खुश हूं।

यह एक फ़ाइल के लिए यह आसान है, लेकिन मैं कुछ और स्केलेबल (इसलिए पावरहेलीश समाधान की ओर झुकाव) के बाद कर रहा हूं।

+1

http: // superuser।कॉम/प्रश्न/27060/बैच-कन्वर्ट-फाइल-फॉर-एन्कोडिंग-या-लाइन-एंडिंग-अंडर-विंडोज/ –

+0

लोगों को लगता है कि उन्हें एक खराब गिट रेपो की वजह से ऐसा करने की आवश्यकता है, तो आप नहीं कर सकते हैं। इस मुद्दे को अन्य तरीकों से गिट के साथ ठीक करना संभव है, जैसे: http://stackoverflow.com/questions/1510798/trying-to-fix-line-endings-with-git-filter-branch-but-having-no- भाग्य/1511273 # 1511273 –

उत्तर

28

यदि आप रुचि रखते हैं तो यहां शुद्ध पावरशेल तरीका है।

कम से कम एक यूनिक्स लाइन समाप्त होने (PowerShell v1) वाली फ़ाइलें ढूँढना:

dir * -inc *.txt | %{ if (gc $_.FullName -delim "`0" | Select-String "[^`r]`n") {$_} } 

यहाँ आप कैसे लगता है और Windows लाइन अंत करने के लिए गुप्त यूनिक्स लाइन अंत है। ध्यान देने योग्य एक महत्वपूर्ण बात यह है कि फ़ाइल के अंत में एक अतिरिक्त पंक्ति समाप्त हो जाएगी (\ r \ n) अंत में अंत में समाप्त होने वाली रेखा नहीं है। यदि आप वास्तव में यह नहीं चाहते हैं, तो मैं एक उदाहरण पोस्ट करूंगा कि आप इससे कैसे बच सकते हैं (यह थोड़ा अधिक जटिल है)।

Get-ChildItem * -Include *.txt | ForEach-Object { 
    ## If contains UNIX line endings, replace with Windows line endings 
    if (Get-Content $_.FullName -Delimiter "`0" | Select-String "[^`r]`n") 
    { 
     $content = Get-Content $_.FullName 
     $content | Set-Content $_.FullName 
    } 
} 

ऊपर काम करता है क्योंकि PowerShell स्वचालित रूप से \ N पर सामग्री बाँट देगा (यदि वे मौजूद छोड़ने \ r) और फिर जोड़ने \ r \ n जब यह प्रत्येक बात (इस मामले में एक लाइन) फाइल करने के लिए लिखता है । यही कारण है कि आप हमेशा फ़ाइल के अंत में समाप्त होने वाली रेखा के साथ समाप्त होते हैं।

इसके अलावा, मैंने उपरोक्त कोड लिखा है ताकि यह केवल उन फ़ाइलों को संशोधित कर सके जिन्हें इसकी आवश्यकता है। यदि आपको इसकी परवाह नहीं है तो आप कथन को हटा सकते हैं। ओह, सुनिश्चित करें कि केवल फाइलें फॉरएच-ऑब्जेक्ट पर आती हैं। इसके अलावा आप उस पाइपलाइन की शुरुआत में जो भी फ़िल्टरिंग चाहते हैं वह कर सकते हैं।

+0

क्या यह ASCII फ़ाइलों के लिए ASCII एन्कोडिंग बनाए रखता है? ... –

+1

डिफ़ॉल्ट रूप से PowerShell "यूनिकोड" में काम करता है। मैं टेक्स्ट एन्कोडिंग पर कोई विशेषज्ञ नहीं हूं, लेकिन मैंने अभी तक डिफ़ॉल्ट के साथ समस्याओं में भाग नहीं लिया है। अगर आप चाहें, तो आप एन्कोडिंग पैरामीटर के साथ गेट-कंटेंट और सेट-कंटेंट कमांड के लिए एन्कोडिंग सेट कर सकते हैं। गेट-हेल्प गेट-कंटेंट-पैरामीटर एन्कोडिंग – JasonMArcher

+0

@ पीटर सिले सेट-कंटेंट या आउट-फाइल में एक-एन्कोडिंग पैरामीटर है जिसका उपयोग फ़ाइल एन्कोडिंग प्रकार को सेट करने के लिए किया जा सकता है। –

13

Cygwin में dos2unix और unix2dos है।

+2

मैं इस तकनीक की अनुशंसा करता हूं क्योंकि यूनिक्स यूटिल मूल फ़ाइल एन्कोडिंग (यूटीएफ -8, ASCII, आदि) को बनाए रखने के लिए बेहतर काम करेंगे। मुझे अतीत में पीएस के साथ समस्याएं आईं जब मैं ASCII फाइल ASCII रखने का इरादा रखता था। –

+0

या msys और फिर आप cmd से उपयोगिताओं का उपयोग कर सकते हैं। – Pod

+2

मैं फ़ाइलों को सूचीबद्ध करने के लिए पावरहेल का उपयोग करता हूं और फिर इसे dos2unix.exe पर पाइप करता हूं: 'dir -Recurse -File -Exclude .git | % {dos2unix --u2d --skipbin $ _} ' – orad

1

यदि सिगविन आपके लिए नहीं है, तो विंडोज के तहत यूनिक्स 2 डीओएस के लिए कई स्टैंडअलोन निष्पादन योग्य हैं यदि आप Google के आसपास हैं, या आप स्वयं को लिख सकते हैं, तो मेरे समान (रूपांतरण के लिए विपरीत दिशा) प्रश्न here देखें।

6

डाउनलोड vim, एक से अधिक फ़ाइलों के लिए अपनी फ़ाइल और इस मुद्दे को

:se fileformat=dos|up 

बैच (सी में सभी * .txt फ़ाइलें: \ tmp - पुनरावर्ती): खोलने

:args C:\tmp\**\*.txt 
:argdo se fileformat=dos|up 
+0

क्या आप इसे फ़ोल्डर या बैच नौकरी के लिए कर सकते हैं? – ninesided

+0

या ग्रहण डाउनलोड करें, फ़ाइल खोलें और लाइन डिलीमीटर को यूनिक्स में कनवर्ट करें। विम कोई शक नहीं है और मैं इसे हर दिन उपयोग करता हूं। लेकिन क्या आपको नहीं लगता कि यह एंडोलाइन को बदलने के लिए उपयोग करने के लिए थोड़ा अधिक है? –

+3

यह मेरी पहली बात है जो मेरे दिमाग में आई है, यह मेरे हर मालिक/प्रशासक के पास है। बीटीडब्ल्यू: क्या आप वास्तव में ग्रहण (85 एमबी) का उपयोग करने का सुझाव दे रहे हैं और इसे vim (8.5MB) का उपयोग करने और इसे एक साथ करने के बजाय फ़ाइल-दर-फ़ाइल कर रहे हैं? – soulmerge

2

आप दृश्य स्टूडियो का उपयोग कर सकते । फ़ाइल -> उन्नत सहेजें विकल्प ...

0

वर्डपैड में यूनिक्स लाइन एंडिंग के साथ एक फ़ाइल खोलना और इसे सहेजना सभी पंक्ति समाप्ति को डॉस के रूप में फिर से लिख देगा। बड़ी संख्या में फाइलों के लिए थोड़ा श्रमिक, लेकिन यह थोड़ी देर में कुछ फ़ाइलों के लिए काफी अच्छी तरह से काम करता है।

1

मैंने कल 6 घंटे बिताए और आज 10,000 फाइलों के साथ एक लूप में दिए गए कोड का परीक्षण किया, उनमें से कई> 50kb आकार में। निचली पंक्ति, पावरहेल कोड बड़ी फ़ाइलों और बड़ी संख्या में फ़ाइलों के लिए बहुत अक्षम/धीमी/अनुपयोगी है। यह बीओएम बाइट्स को भी सुरक्षित नहीं करता है। मैंने unix2dos 7.2.3 को सबसे तेज़ और सबसे व्यावहारिक समाधान माना। उम्मीद है कि यह दूसरों की मदद करता है और उन्हें समय बचाता है।

+0

यह इस तथ्य से है कि गेट-कंटेंट बहुत धीमी (और अक्षम) है, खासकर बड़ी फाइलों पर। – bluuf

5

यह मेरे लिए काम करता प्रतीत होता है।

Get-Content Unix.txt | Out-File Dos.txt