ফাইলের নামে নতুন লাইনগুলি সরান


9

আমার কাছে একটি পিএইচপি কোড রয়েছে যা ফাইলের নাম উত্পন্ন করে যাতে উইজেট তার লগগুলি সংযোজন করবে। আমি 2000+ ফাইল তৈরি করেছি, তবে সমস্যাটি হ'ল তাদের সাথে কাজ করতে আমার সমস্যা হচ্ছে কারণ PHP_EOLএর নামের অংশ হিসাবে রাখার ক্ষেত্রে আমার ভুল হয়েছিল , সেই কোডটি LF/line feed/%0Aতার নামে যুক্ত করবে

এই জাতীয় ফাইলের উদাহরণ (যখন ব্রাউজারের মাধ্যমে অ্যাক্সেস করা হয়, যখন / var / www / html রাখা হয়) এক্সটেনশন নামের পূর্বে http://xxxx/wget_01_a%0a.txtলক্ষ্য করুন%0a

আমি বিশৃঙ্খলাবদ্ধ হয়েছি, এবং আমি আশা করি একটি পুনর্নামকরণ ব্যাচ আছে যা সমস্ত ফাইল সন্ধান করবে এবং যদি এটি পাওয়া যায় তবে এটি line feedলাইন ফিড ছাড়াই এর নামকরণ করবে যাতে এটি ঠিক হবেhttp://xxxx/wget_01_a.txt

আমি কীভাবে এটি পরিচালনা করব তা সম্পর্কে নিশ্চিতভাবে নিশ্চিত নই কারণ যখন মনে হয় আমি যখন lsসমস্ত বিশেষ চরিত্রকে অবাঞ্ছিত চর হিসাবে সীমাবদ্ধ রাখি না ?, তখন আমি কেবল লাইন ফিডটিই টার্গেট করতে চাই।

উত্তর:


12

renameইউটি-লিনাক্স থেকে ইউটিলিটি ব্যবহার করা হচ্ছে , যা সেন্টোস 6 সরবরাহ করে এবং বাশ ধরে:

rename $'\n' '' wget_*

এটি তালিকাভুক্ত ফাইলগুলির নাম থেকে নতুন লাইন অক্ষরগুলি মুছতে বলে। আপনি এটি যা চান তা তা নিশ্চিত করার জন্য আমি একটি ছোট সাবসেট চেষ্টা করে দেখার পরামর্শ দিচ্ছি (নোট করুন যে renameসেন্টোস 7 এ -vএটি কী পরিবর্তন করছে তা আপনাকে দেখানোর জন্য একটি স্যুইচ সমর্থন করে)।

পরিবর্তে আপনি যদি পার্ল-ভিত্তিক সরবরাহ করে এমন কোনও বিতরণে ছিলেন rename:

rename -n 's/\n//g' wget_*

এবং তারপরে -nআসলে পুনরায় নামকরণ না করে চালান ।


ভাই, কিছুই ঘটেনি পেস্টবিন.
com

আপনার সম্ভবত লাইনফিডের চরিত্রটি আসলে নয় \n? আপনি কি প্রতিধ্বনি মতো কিছু করতে পারেন *.txt | od -cতাই আমরা দেখতে পাই যে প্রকৃত অ-মুদ্রণযোগ্য অক্ষরটি কী আছে?
ধাগ


আমি কী নিশ্চিত তা নিশ্চিত নই, যদি না কোনও কারণে আপনার পূর্ববর্তী পেস্টের ফাইলটি মেলে না *.txt(এটি ব্যাখ্যা করবে যে renameএটি কেন না নেয়)। আপনি যদি দুটি প্যাটার্নটি সেট করেন তবে এবং এর txtপরিবর্তে বলুন, আপনি কি কোনও আউটপুট পান? প্রতিধ্বনি $ '\ n' সত্যিই দুটি নতুনলাইন প্রিন্ট করে? $'\n'''
ধাগ

1
আমাকে rename $'\r' '' wget_*এটির কাজ করার জন্য ব্যবহার করতে হয়েছিল
ষদেব

2

ইতিমধ্যে জবাব দেওয়া হয়েছে তার উপর ভিত্তি করে, আমি এটির নামকরণের সাথে ফাইন্ড কমান্ড একত্রিত করে বর্তমান ফোল্ডার এবং সাব-ফোল্ডারে লাইন ফিডযুক্ত সমস্ত ফাইলের নামকরণ করতে সাধারণকরণ করেছি -

find -name $'*\n*' -exec rename  $'s|\n| |g' '{}' \;

এখানে, সন্ধান করুন কমান্ড লাইন ফিডযুক্ত সমস্ত ফাইলের সন্ধান করে এবং পুনর্নবীকরণ কমান্ড প্রতিটি লাইন ফিডকে নামের সাথে একটি স্থান দিয়ে প্রতিস্থাপন করে।

একই রকম যে কোনও সমস্যাযুক্ত চরিত্র যেমন ক্যারেজ রিটার্ন (\ r) এর ক্ষেত্রেও করা যেতে পারে।

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