কীভাবে আমি একটি সম্পূর্ণ ডিরেক্টরিতে ডস 2 ইউনিক্স চালাতে পারি? [বন্ধ]


333

আমি একটি সম্পূর্ণ ডিরেক্টরি ব্যবহার করে রূপান্তর করতে হবে dos2unix। আমি কীভাবে এটি করতে পারি তা বুঝতে সক্ষম নই।

উত্তর:


591

find . -type f -print0 | xargs -0 dos2unix

বর্তমান ডিরেক্টরি ডিরেক্টরিতে পুনরাবৃত্তভাবে সমস্ত ফাইল সন্ধান করবে এবং ডস 2 ইউনিক্স কমান্ড এই ফাইলগুলির জন্য কল করবে


94
আপনার যদি ফাইলনামে ফাঁকা জায়গা থাকে তবে ভেঙে ফেলত। find . -type f -print0 | xargs -0 dos2unixআমি মনে করি সমস্যার সমাধান করবে would
নওফাল ইব্রাহিম

1
আমি এই সন্ধান মত দিয়েছেন। -type f -exec ডস 2 ইউনিক্স} home / হোম / ভেনুক / ডেস্কটপ / এনইওএসসিআরসি এবং এটি ত্রুটিটি খুঁজে পেয়েছিল: `-এক্সেক'র পক্ষে যুক্তি অনুপস্থিত
বিবেক গৌর

1
লক্ষ করুন যে ব্যাকস্ল্যাশটি সেমি-কোলন থেকে বেরিয়ে গেছে তা নিশ্চিত করে যে ডস 2 ইউনিক্স কমান্ডগুলি আধা-কলোন দ্বারা পৃথক করা হয়েছে যাতে তারা একসাথে ছাঁটাই না করে। এরপরে আপনি যদি আরও একটি কমান্ড চালাতে চান তবে আপনার আর একটি আধা-কোলোন প্রয়োজন হবে, তাই\;; echo Hello
জোশ

1
যদিও এই কমান্ডটি সম্পর্কে সতর্ক থাকুন, এটি ফাইলের রূপান্তর প্রয়োজন কিনা তা পরীক্ষা করে না, সুতরাং বাইনারি ফাইলগুলিও তাদেরকে দূষিত করে "রূপান্তরিত" করা হবে।
ভিজিউজমানপ

2
@vguzmanp সত্য, অনুরোধটি findএই চেকটি করে না (যদিও এটি যোগ করার পক্ষে যথেষ্ট সহজ হবে), তবে আধুনিকভাবে dos2unixসঠিকভাবে বাইনারি ফাইলগুলি এড়িয়ে যায়।
কাইল স্ট্র্যান্ড

67

যদি এটি একটি বৃহত ডিরেক্টরি হয় তবে আপনি একাধিক প্রসেসরের সাথে চলমান বিবেচনা করতে পারেন:

find . -type f -print0 | xargs -0 -n 1 -P 4 dos2unix 

এটি একবারে 1 টি ফাইল পাস করবে এবং 4 টি প্রসেসর ব্যবহার করবে।


1
এই পদ্ধতির সুবিধা রয়েছে, যা এটি অবিরত থাকে, যদিও ডস 2 ইউনিক্স কোনও সমস্যার মুখোমুখি হয়! "--ফোর্স" পদ্ধতির মতো কিছু। এটার জন্য ধন্যবাদ!
ফ্রিও

বাহ - উইন্ডোজ বিকাশকারী কোড সংযোজনগুলিতে গিটে ভুলভাবে যোগ করা হয়েছে এমন একটি উইন্ডোজ বিকাশকারী কোড সংযোজন রূপান্তর করার চেষ্টা করার সময় আমাকে কেবলমাত্র সমস্যা সমাধানের অনেক সময় বাঁচিয়েছে। ধন্যবাদ!!
নেটায়তি

1
প্রতিটি পৃথক ফাইলের জন্য একটি নতুন ডস 2 ইউনিক্স প্রক্রিয়া শুরু করা ব্যাপকভাবে অপ্রয়োজনীয় ওভারহেড প্রবর্তন করবে। আমি nবা দুটি মাত্রার অর্ডার দিয়ে এটিকে ধাক্কা দেব (আমরা এখানে কতগুলি ফাইলের বিষয়ে কথা বলছি তার উপর নির্ভর করে)
জোনোকায়েজি

25

আমি ডস 2 ইউনিক্স দ্বারা দুর্বলভাবে সন্তুষ্ট হওয়ার কারণ হিসাবে, আমি আমার নিজস্ব সাধারণ ইউটিলিটিটি আউট করেছি। গতি এবং পূর্বাভাসের কয়েকটি সুবিধা বাদে বাক্য গঠনটিও কিছুটা সহজ:

endlines unix *

এবং আপনি যদি এটি উপ-ডিরেক্টরিতে নেমে যেতে চান (লুকানো ডায়ারগুলি এবং অ-পাঠ্য ফাইলগুলি এড়িয়ে যাওয়া):

endlines unix -r .

endlineshttps://github.com/mdolidon/endlines এখানে উপলব্ধ


1
এটি নিখুঁত! আমি এটিতে
ফায়াত

2
এটি কীভাবে উন্নতি করে dos2unix? সত্যই কৌতূহলী।
ওয়ালফ

3
1 / প্রধানত, বিভিন্ন dos2unixরকমের ক্ষমতা সহ অনেকগুলি আলাদা আলাদা রয়েছে (কিছু উদাহরণস্বরূপ ইউটিএফ 32 পড়েন, কিছু কিছু করেন না; শেষরেখাগুলি দেয় না)। কেবল একটিই রয়েছে endlines, যা ক্ষমতাগুলি সুপরিচিত। ইনপুট 2 / উদার, সব dos2unixহয় না । 3 / দক্ষ ফাইল ট্রি এক্সপ্লোরেশন, কয়েক হাজার ফাইলে দ্রুত এবং ব্যবহারিক হতে ডিজাইন করা। ওএসএক্স-এর বাক্সের বাইরে 4 / রানআউট - যা এখন ব্রু প্যাকেজটির উপস্থিতি কম গুরুত্বপূর্ণ।
ম্যাথিয়াস ডলিডন

1
আমার ক্ষেত্রে এটি হ'ল আমার অনেক ধন্যবাদের প্রয়োজন। বৈশিষ্ট্যগুলি যা স্বাগত হয় তা হ'ল ডিরেক্টরি ট্রি এবং দ্রুত কার্যকরকরণের সময় প্রক্রিয়া করার সহজ উপায়।
আলসাবি

17

লুকানো ফাইল এবং ফোল্ডারগুলি এড়ানো সম্ভবত সেরা, যেমন .git.ব্যবহারের পরিবর্তে findআপনার bashসংস্করণটি যদি সাম্প্রতিক পর্যায়ে হয় বা আপনি ব্যবহার করেন তবে zshকেবল করুন:

dos2unix **

নোট করুন যে বাশের জন্য এটির প্রয়োজন হবে:

shopt -s globstar

.... তবে এটি একটি দরকারী যথেষ্ট বৈশিষ্ট্য যা আপনার সততার সাথে আপনার .bashrcযেকোন উপায়ে রাখা উচিত ।

আপনি যদি লুকানো ফাইল এবং ফোল্ডারগুলি এড়িয়ে যেতে না চান তবে আপনি এখনও গণ্ডগোল করতে চান না find(এবং আমি আপনাকে দোষ দেব না), আপনি কেবল লুকানো এন্ট্রি মেলে একটি দ্বিতীয় পুনরাবৃত্ত-গ্লোব যুক্তি সরবরাহ করতে পারেন :

dos2unix ** **/.*

মনে রাখবেন যে উভয় ক্ষেত্রেই গ্লোব ডিরেক্টরিগুলি অন্তর্ভুক্ত করার জন্য প্রসারিত হবে, সুতরাং আপনি নীচের সতর্কতাটি দেখতে পাবেন (সম্ভাব্যত বহু বার) Skipping <dir>, not a regular file.


1
এটি আমার পক্ষে কাজ করে না। গ্লোবস্টার সিনট্যাক্সটি ডস 2 ইউনিক্সের জন্য কাজ করে? আমি সাফল্যের সাথে অন্য কোথাও গ্লোবস্টার ব্যবহার করেছি, তবে এটি কাজ করতে পারেনি। আমি ব্যাশ 4.3.11 (1)
এনএস ডু

@ এনএনএসডুয়েট * এনআইএক্স স্টাইল শেলগুলি এক্সিকিউটিভদের আর্গুমেন্ট-প্রসারণের আচরণকে পরিবর্তন করতে দেয় না, কারণ (উইন্ডোতে অসদৃশ) এক্সিকিউটেবলের পক্ষে যুক্তি পাওয়ার আগে আর্গুমেন্ট-প্রসারণ করা হয়। সুতরাং কেবলমাত্র আমি যা ভাবতে পারি তা হ'ল আপনার কাছে dos2unixএমন একধরনের নাম রয়েছে যা যুক্তিগুলি কীভাবে প্রসারিত হবে তা প্রভাবিত করে। type dos2unixআপনার সিস্টেমে আউটপুট কি ?
কাইল স্ট্র্যান্ড

1
@ এনএনএসডুয়েট এখানে কিছু বিভ্রান্তি রয়েছে। আমার উত্তর স্পষ্টভাবে বলে যে, বিন্দু ব্যবহারের **পরিবর্তে find"যেমন লুকানো ফাইল এবং ফোল্ডার, এড়িয়ে যান হয় .git"। dos2unixলুকানো ফাইলগুলি কখনও দেখেন না, কারণ **এগুলি প্রদর্শন করার জন্য প্রসারিত হয় না। আপনি যদি চান স্বয়ংক্রিয়ভাবে চালানোর জন্য dos2unixলুকানো ফাইল এবং ফোল্ডার উপর, আপনি ব্যবহার করতে পারেন findবা প্রসারিত হবে শুধুমাত্র লুকানো ফাইল এবং ফোল্ডার সহ (রুট Dir), বর্তমান ফোল্ডারে (পিতা বা মাতা Dir), এবং অন্য কোন লুকানো এন্ট্রি। dos2unix ** **/.***/.*...
কাইল স্ট্র্যান্ড

1
(নোট যে dos2unixকেবল ছাপে Skipping <dir>, not a regular file.একটি ডিরেক্টরি করলে রান, তাই চলমান ..এবং .নিরাপদ।) এ ছাড়া, মিশ্রন lsএকটি উল্লিখিত glob সাথে আছেন না কিভাবে উল্লিখিত glob সম্প্রসারিত হয় চেক করতে একটি ভালো উপায়; echoপরিবর্তে ব্যবহার করুন: থেকে প্রাপ্ত echo **আর্গুমেন্ট মুদ্রণ করবে । dos2unixdos2unix **
কাইল স্ট্র্যান্ড

1
ধন্যবাদ! বোধ হয়! ঠিক আছে, আমার অন্তর্ভুক্ত সম্পর্কে আমার সম্পূর্ণ ভুল ধারণা ছিল **এবং ব্যবহারটি echoএটি পরিষ্কার করে।
এনএস ডু টোইট

7

একটি সাধারণ ব্যবহারের ক্ষেত্রে গিট সংগ্রহস্থলের প্রতিশ্রুতিবদ্ধ সমস্ত ফাইলের জন্য লাইন শেষ মানক হিসাবে দেখা যায় :

git ls-files | xargs dos2unix

মনে রাখবেন যে নির্দিষ্ট ফাইল (যেমন *.sln, *.bat) ইত্যাদি করা হয় শুধুমাত্র উইন্ডোজ অপারেটিং সিস্টেমে ব্যবহার করা হয় এবং উচিত রাখাCRLF বিভক্তি:

git ls-files '*.sln' '*.bat' | xargs unix2dos

প্রয়োজনে ব্যবহার করুন .gitattributes


6

যে কোনও সোলারিস ব্যবহারকারীর জন্য (5..১০ ব্যবহার করছি) আরও নতুন সংস্করণে, পাশাপাশি অন্যান্য ইউনিক্স সিস্টেমেও প্রয়োগ হতে পারে:

ডস 2 ইউনিক্স ফাইলটি ওভাররাইট করার জন্য ডিফল্ট হয় না, এটি কেবল আপডেট সংস্করণটি স্টডআউটে মুদ্রণ করবে, সুতরাং আপনাকে উত্স এবং লক্ষ্য নির্দিষ্ট করতে হবে, অর্থাত্ একই নামটি দু'বার:

find . -type f -exec dos2unix {} {} \;

2
for FILE in /var/www/html/files/*
do
 /usr/bin/dos2unix FILE
done

1
স্ট্যাক ওভারফ্লোতে আপনাকে স্বাগতম। যদিও আপনার সমাধানটি একটি বৈধ সমাধান, আপনি যদি এটিতে কিছু ব্যাখ্যা যোগ করতে পারেন তবে তা দুর্দান্ত। আপনার উত্তরটি ন্যায়সঙ্গত করার জন্য আপনি অন্যান্য উত্তরগুলি উল্লেখ করতেও বিবেচনা করতে পারেন। আরও তথ্যের জন্য কীভাবে উত্তর দিতে হবে দয়া করে একবার দেখুন।
কাভন্তুর

2

আমারও একই সমস্যা হয়েছে এবং আমি পোস্টগুলি সমাধান করার জন্য ধন্যবাদ এখানে পোস্ট করেছি। আমি জানতাম যে আমার কাছে প্রায় শতাধিক ফাইল রয়েছে এবং এটি কেবল * .js ফাইলের জন্য চালানো দরকার। find . -type f -name '*.js' -print0 | xargs -0 dos2unix

আপনার সহায়তার জন্য সবাইকে ধন্যবাদ।


0

আমি মনে করি সহজ উপায় হ'ল:

dos2unix $(find . -type f)

0

আমি এটি এক মিলিয়ন বারের মতো গুগল করেছি, সুতরাং আমার সমাধানটি হ'ল আপনার পরিবেশে এই বাশ ফাংশনটি রাখা।

.bashrcবা .profileবা যাই হোক না কেন

dos2unixd() {
  find $1 -type f -print0 | xargs -0 dos2unix
}

ব্যবহার

$ dos2unixd ./somepath

এইভাবে এখনও আপনার কাছে মূল কমান্ড রয়েছে dos2unixএবং এটি এটিকে মনে রাখা সহজ dos2unixd


-1

কোনও সাব-ডিরেক্টরি না থাকলে আপনিও নিতে পারেন

ls | xargs -I {} dos2unix "{}"

4
যদি কোনও উপ-ডিরেক্টরি না থাকে dos2unix *তবে সরল এবং আসলে এর চেয়ে আরও শক্তিশালী হবে। (এটি সাধারণত আউটপুটটি পাইপ করার পরামর্শ দেওয়া হয় না ls, কারণ এটি একটি ফর্ম্যাটিং সরঞ্জাম এবং *প্রোগ্রাম্যাটিক ব্যবহারের জন্য আরও নির্ভরযোগ্য))
কাইল স্ট্র্যান্ড

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