जवाबों:
यह निर्भर करता है: यदि फ़ाइलें संस्करण नियंत्रण में हैं, तो यह एक बल्कि अलोकप्रिय इतिहास-प्रदूषणकारी निर्णय हो सकता है। Git के पास चेक-आउट पर स्वचालित रूप से लाइन अंत को बदलने का विकल्प है।
यदि आप परवाह नहीं करते हैं और जल्दी से बदलना चाहते हैं, तो fromdos
/ todos
और dos2unix
/ जैसे कार्यक्रम हैं unix2dos
जो आपके लिए ऐसा करते हैं। आप उपयोग कर सकते हैं find
: find . -type f -name '*.php' -exec dos2unix '{}' +
।
सहित कई समर्पित कार्यक्रम हैं
बस उचित दिशा के लिए उपकरण चुनें और कमांड लाइन पर कनवर्ट करने के लिए फ़ाइलों के नाम पास करें।
यदि आपके पास या तो नहीं है, लेकिन लिनक्स या सिगविन है:
sed -i -e 's/\r\+$//' filename # dos|unix -> unix
sed -i -e 's/\r*$/\r/' filename # dos|unix -> dos
यदि आपके पास पर्ल है:
perl -i -pe 's/\r+$//' filename # dos|unix -> unix
perl -i -pe 's/\r*$/\r/' filename # dos|unix -> dos
यूनिक्स से डॉस तक जाने के लिए केवल पॉज़िक्स टूल (बिजीबॉक्स सहित) के साथ, आपको सीआर कमांड को सचमुच कमांड कमांड में पास करना होगा।
cr=$(echo | tr '\n' '\r')
sed -e "s/$cr*\$/$cr/" <filename >filename.dos
mv filename.dos filename
दूसरी दिशा में, आप बस सभी सीआर को हटा सकते हैं:
tr -d '\r' <filename >filename.dos
mv filename.dos filename
आप वाइल्डकार्ड का उपयोग एक ही बार में एक ही निर्देशिका में कई फ़ाइलों को परिवर्तित करने के लिए कर सकते हैं, जैसे
sed -i -e 's/\r\+$//' *.txt
वर्तमान निर्देशिका और उसकी उपनिर्देशिकाओं में सभी फ़ाइलों को परिवर्तित करने के लिए, यदि आपका शेल zsh है, तो आप उपयोग कर सकते हैं **/
, जैसे
sed -i -e 's/\r\+$//' **/*.txt
आप **/
बैश ,4 में उपयोग कर सकते हैं , लेकिन आपको shopt -s globstar
पहले चलाने की जरूरत है (आप इस लाइन को अपने में डाल सकते हैं ~/.bashrc
)। आप **/
ksh93 में उपयोग कर सकते हैं , लेकिन आपको set -o globstar
पहले चलाने की आवश्यकता है (आप इस लाइन को अपने में डाल सकते हैं ~/.kshrc
।
यदि आप केवल उन उपकरणों का उपयोग कर सकते हैं जिनके लिए पुनर्निर्देशन की आवश्यकता होती है, तो for
लूप का उपयोग करें ।
for x in *.txt; do
tr -d '\r' <"$x" >"$x.dos"
mv -- "$x.dos" "$x"
done
यदि आपके पास यह **/
चुनने के लिए अधिक जटिल मिलान की आवश्यकता नहीं है कि कौन सी फ़ाइलों का चयन करें, तो find
कमांड का उपयोग करें । यहाँ एक लिनक्स / साइग्विन उदाहरण दिया गया है, जो वर्तमान निर्देशिका और इसके उपनिर्देशिकाओं के तहत सभी फ़ाइलों को पुनरावृत्ति करता है, जिन्हें बुलाया फ़ाइलों .o
और उपनिर्देशिकाओं के तहत बुलाया जाता है bin
।
find -name 'bin' -type d -prune -o \
\! -name '*.o' \
-exec sed -i -e 's/\r\+$//' {} +
यहाँ एक POSIX उदाहरण है। हम find
एक शेल शुरू करने के लिए कहते हैं जो आवश्यक पुनर्निर्देशन कर सकता है।
find -name 'bin' -type d -prune -o \
\! -name '*.o' \
-exec sh -c '
tr -d '\r' <"$0" >"$0.dos"
mv -- "$0.dos" "$0"
' {} \;
find
शेल कमांड में लूप का उपयोग करके आप अधिक जटिल कोड की कीमत पर विधि को थोड़ा तेज कर सकते हैं ।
find -name 'bin' -type d -prune -o \
\! -name '*.o' \
-exec sh -c '
for x; do
tr -d '\r' <"$x" >"$x.dos"
mv -- "$x.dos" "$x"
done
' _ {} +
अगर बता दिया जाए तो wincp ऑटो-कन्वर्ट भी हो जाएगा ।
यदि आपकी फाइलें एक ही डायरेक्टरी में रहती हैं:
DIRECTORY=/your/directory
unix2dos $DIRECTORY/*