ইউনিক্স এবং উইন্ডোজ লাইন ব্রেক ফর্ম্যাটের মধ্যে একটি ফাইল সিস্টেম শাখায় সমস্ত ফাইলকে কীভাবে বড় আকারে রূপান্তর করা যায়?


14

প্রত্যেকে জানে :-) যে উইন্ডোজে সরল পাঠ্য ফাইলের লাইনগুলি সিআর + এলএফ দিয়ে শেষ করা হয় এবং ইউনিক্স এবং লিনাক্সে - কেবল এলএফ দিয়ে। কীভাবে আমি আমার সমস্ত উত্স কোড ফাইলগুলি এক ফর্ম্যাট থেকে অন্য ফর্ম্যাটে রূপান্তর করতে পারি?

উত্তর:


17

এটি নির্ভর করে: ফাইলগুলি যদি সংস্করণ নিয়ন্ত্রণে থাকে তবে এটি ইতিহাসের দূষণমূলক সিদ্ধান্ত হতে পারে uting গিটের চেক-আউটে স্বয়ংক্রিয়ভাবে লাইন এন্ডিংগুলিকে রূপান্তর করার বিকল্প রয়েছে।

আপনি যদি যত্ন না নেন এবং দ্রুত রূপান্তর করতে চান তবে এমন প্রোগ্রাম রয়েছে যা fromdos/ todosএবং dos2unix/ unix2dosআপনার জন্য এটি করে। আপনি ব্যবহার করতে পারেন find: find . -type f -name '*.php' -exec dos2unix '{}' +


7

সহ বেশ কয়েকটি ডেডিকেটেড প্রোগ্রাম রয়েছে

  • dos2unixএবং unix2dosথেকে dos2unix সরঞ্জাম
  • todosএবং fromdosথেকে tofrodos সরঞ্জাম

উপযুক্ত দিকনির্দেশের জন্য কেবল সরঞ্জামটি চয়ন করুন এবং কমান্ড লাইনে রূপান্তর করতে ফাইলগুলির নামটি দিন।


আপনার যদি না হয় তবে লিনাক্স বা সাইগউইন রয়েছে:

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কমান্ডটি ব্যবহার করুন । এখানে একটি লিনাক্স / Cygwin উদাহরণ যা বর্তমান ডিরেক্টরী অধীনে সমস্ত ফাইল এবং তার সাব যাও recursively পরিবর্তন করে বলা ফাইলের জন্য ছাড়া এর .oএবং সাবডিরেক্টরি নামক অধীনে bin

find -name 'bin' -type d -prune -o \
     \! -name '*.o' \
     -exec sed -i -e 's/\r\+$//' {} +

এখানে একটি পসিক্স উদাহরণ। আমরা 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
' _ {} +

2

যদি বলা হয় তবে উইনসপিও স্বয়ংক্রিয় রূপান্তর করবে ।

যদি আপনার ফাইলগুলি একই ডিরেক্টরিতে থাকে:

DIRECTORY=/your/directory
unix2dos $DIRECTORY/*

আপনি দয়া করে আরও কিছু বর্ণনা করতে পারেন, উইনসিসিপি মাধ্যমে কীভাবে অর্জন করবেন?
হরিশ শর্মা

@ হরিশশর্মা আমি "তাই বলেছি" -এ উপরে একটি লিঙ্ক যুক্ত করেছি।
নীল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.