বিওএম সহ ইউটিএফ -8 ফাইলগুলি সন্ধানের মার্জিত উপায়?


94

ডিবাগিংয়ের উদ্দেশ্যে, আমাকে ইউটিএফ -8 বাইট অর্ডার চিহ্ন (বিওএম) দিয়ে শুরু হওয়া সমস্ত ফাইলের জন্য পুনরাবৃত্তভাবে একটি ডিরেক্টরি অনুসন্ধান করতে হবে। আমার বর্তমান সমাধানটি একটি সহজ শেল স্ক্রিপ্ট:

find -type f |
while read file
do
    if [ "`head -c 3 -- "$file"`" == $'\xef\xbb\xbf' ]
    then
        echo "found BOM in: $file"
    fi
done

বা, যদি আপনি সংক্ষিপ্ত, অপঠনযোগ্য ওয়ান-লাইনার পছন্দ করেন:

find -type f|while read file;do [ "`head -c3 -- "$file"`" == $'\xef\xbb\xbf' ] && echo "found BOM in: $file";done

এটি লাইন ব্রেক সহ এমন ফাইলের নামগুলির সাথে কাজ করে না তবে এই জাতীয় ফাইলগুলি আর যাইহোক আশা করা যায় না।

কোন ছোট বা আরও মার্জিত সমাধান আছে?

পাঠ্য সম্পাদকদের জন্য কি কোনও আকর্ষণীয় পাঠ্য সম্পাদক বা ম্যাক্রো রয়েছে?

উত্তর:


166

এই সহজ কমান্ডটি সম্পর্কে যা কেবল স্নিগ্ধ বিওএমকে সন্ধান করে না কিন্তু পরিষ্কার করে? :)

find . -type f -exec sed '1s/^\xEF\xBB\xBF//' -i {} \;

আমি "সন্ধান" পছন্দ করি :)

সতর্কতা উপরেরগুলি বাইনারি ফাইলগুলিতে পরিবর্তন করবে যা এই তিনটি অক্ষর ধারণ করে।

আপনি যদি কেবল বিওএম ফাইলগুলি দেখাতে চান তবে এটি ব্যবহার করুন:

grep -rl $'\xEF\xBB\xBF' .

9
কোনও বিওএম চিহ্নিতকারী দিয়ে ভুলভাবে পিডিএফ সনাক্ত করে .. কারণ এটি কেবল প্রথম
লাইনটিই

4
বা এস্কের সাথে: "ack '\ xEF \ xBB \ xBF'"
স্মার

5
শীর্ষস্থানীয় 'গুলি'র আগে 1 যুক্ত করার জন্য সেড কমান্ডটি পরিবর্তন করুন যাতে এটি কেবল প্রথম লাইনেই প্রযোজ্য
বেন কম্বি

27
grep -rlI $'\xEF\xBB\xBF' .বাইনারি ফাইল উপেক্ষা করতে ব্যবহার করুন ।
dbernard

4
ইতিমধ্যে যেমন বলা হয়েছে, জেপিজি এবং অন্যান্য বাইনারি ফাইলগুলি সনাক্ত করে এবং সংশোধন করে।
জেহি

41

উইন্ডোজে এটি করার সর্বোত্তম এবং সহজ উপায়:

মোট কমান্ডার - প্রকল্পের মূল দির যান → ফাইলগুলি ( Alt+ F7) → ফাইলের প্রকারগুলি সন্ধান করুন *। * "EF বিবি বিএফ" পাঠ্য খুঁজুন '' হেক্স 'চেকবক্স → অনুসন্ধান করুন

এবং আপনি তালিকা পেতে :)


4
দুর্দান্ত, বিশেষত আমার দীর্ঘ সময়ের প্রিয় মোট কমান্ডারের ব্যবহার, তবে দুর্ভাগ্যক্রমে এটি অন্য অনেকের মতো একই সমস্যার মুখোমুখি হয়েছে: এটি একটি ফ্লাইতে সমস্ত বাইট অনুসন্ধান করে, তাই অনেকগুলি চিত্র ইত্যাদির খবর পাওয়া যায়। এটি হেক্সের পরিবর্তে RegEx ব্যবহার করে এবং "^ \ xEF \ xBB \ xBF" অনুসন্ধান করে কিছুটা উন্নত করা যেতে পারে যা অনেকগুলি চিত্র সরিয়ে ফেলতে পারে তবে ফাইলগুলির মধ্যে অর্ধেকও বিএম রয়েছে এমন ফাইল রয়েছে (যদিও সেখানে কয়েকটি হওয়া উচিত) এবং অবশ্যই যে কোনও বাইনারি ফাইল যা আসকি নিউলাইন চারকোডের সাথে ঘটে তা কেবল বিওএম-এর beofre। তবুও, সমস্ত চিত্র আমার পরীক্ষার অনুসন্ধানে চলে গেছে।
লেগোলাস

13
find . -type f -print0 | xargs -0r awk '
    /^\xEF\xBB\xBF/ {print FILENAME}
    {nextfile}'

উপরের প্রদত্ত বেশিরভাগ সমাধানগুলি ফাইলের প্রথম লাইনের চেয়ে বেশি পরীক্ষা করে, এমনকি যদি কিছু (যেমন মার্কাসের সমাধান) হয় তবে ফলাফলগুলি ফিল্টার করে। এই সমাধানটি প্রতিটি ফাইলের প্রথম লাইনটি পরীক্ষা করে তাই এটি আরও দ্রুত হওয়া উচিত।


4
লিনাক্স (আরএইচইএল 6) -find . -type f -print0 | xargs -0 awk '/^\xEF\xBB\xBF/ {print FILENAME} {nextfile}'
অলিভিয়ের রেফালো

এই ফাইলগুলি সন্ধান করার পরে আপনার কোডটি কীভাবে সংশোধন করতে হবে?
কালো

7

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

fgrep -rl `echo -ne '\xef\xbb\xbf'` .

5

আমি এরকম কিছু ব্যবহার করব:

grep -orHbm1 "^`echo -ne '\xef\xbb\xbf'`" . | sed '/:0:/!d;s/:0:.*//'

যা বিওএম ফাইলের প্রথম বাইট থেকে শুরু করে তা নিশ্চিত করবে।


5

আপনি grepতাদের খুঁজে বের করতে এবং পার্লকে তাদের মতো করে বের করে দিতে ব্যবহার করতে পারেন :

grep -rl $'\xEF\xBB\xBF' . | xargs perl -i -pe 's{\xEF\xBB\xBF}{}'

এইটি আমার পক্ষে কাজ করেছে, গ্রহণযোগ্য উত্তর দেয় নি (আমি ম্যাকে আছি)
mjsarfatti

4

উইন্ডোজ ব্যবহারকারী জন্য, দেখুন এই (খোঁজার জন্য ভাল পিএইচপি স্ক্রিপ্ট BOMআপনার প্রকল্পের মধ্যে)।


লিঙ্কযুক্ত ওয়েবসাইটটি দেখায়: "ওয়েবসাইট অফলাইন, কোনও ক্যাশেড সংস্করণ উপলব্ধ নেই"।
vog

একই স্ক্রিপ্টটি গিথুব
Emrahgunduz

ধন্যবাদ বন্ধু, তোমার উত্তর আমার দিনটি বাঁচিয়েছে।
ক্রুনাল পঞ্চাল

এবং একটি বিওএম অনুসন্ধানকারী: github.com/svn2github/wikia/blob/master/extensions/FCKeditor/… (যদি কেউ 'স্বয়ংক্রিয়' পরিষ্কার পছন্দ না করে বা কেবল বিওএম দিয়ে ফাইলগুলি সন্ধান করতে চায়)
মেলোনিক

3

এর একটি ওভারকিল সমাধান হ'ল phptags( viএকই নামের সরঞ্জাম নয় ), যা বিশেষত পিএইচপি স্ক্রিপ্টগুলির সন্ধান করে:

phptags --warn ./

এরকম কিছু আউটপুট দেবে:

./invalid.php: TRAILING whitespace ("?>\n")
./invalid.php: UTF-8 BOM alone ("\xEF\xBB\xBF")

এবং --whitespaceমোডটি স্বয়ংক্রিয়ভাবে এ জাতীয় সমস্যাগুলি সংশোধন করবে (পুনরাবৃত্তভাবে, তবে দৃ as়ভাবে দাবি করে যে এটি কেবল। পিএফপি স্ক্রিপ্টগুলি পুনরায় লিখবে))


2
find -type f -print0 | xargs -0 grep -l `printf '^\xef\xbb\xbf'` | sed 's/^/found BOM in: /'
  • find -print0 নতুন লাইন ব্যবহার না করে প্রতিটি ফাইলের নামের মাঝে একটি নাল \ 0 রাখে
  • xargs -0 লাইন বিচ্ছিন্নের পরিবর্তে নাল পৃথক যুক্তিগুলি প্রত্যাশা করে
  • grep -l রেজ্যাগেক্সের সাথে মেলে এমন ফাইলগুলি তালিকাভুক্ত করে
  • রেজেক্স ^\xeff\xbb\xbfসম্পূর্ণরূপে সঠিক নয়, কারণ এটি যদি কোনও লাইনের শুরুতে শূন্য প্রস্থের শূন্যস্থান থাকে তবে এটি অ-বোমড ইউটিএফ -8 ফাইলের সাথে মিলবে it


2

আমি এটি কেবল জাভাস্ক্রিপ্ট ফাইলগুলি সংশোধন করতে ব্যবহার করেছি:

find . -iname *.js -type f -exec sed 's/^\xEF\xBB\xBF//' -i.bak {} \; -exec rm {}.bak \;

0

আপনি যদি ইউটিএফ ফাইলগুলি সন্ধান করেন তবে ফাইল কমান্ডটি কাজ করে। এটি আপনাকে জানাবে যে ফাইলটির এনকোডিংটি কী। সেখানে যদি কোনও এএসসিআইআই অক্ষর না থাকে তবে এটি ইউটিএফ নিয়ে আসবে।

file *.php | grep UTF

যদিও এটি পুনরাবৃত্তির সাথে কাজ করবে না। এটিকে পুনরাবৃত্ত করার জন্য আপনি সম্ভবত কিছু অভিনব কমান্ড আপ করতে পারেন, তবে আমি মাত্রা ছাড়াই যতক্ষণ না নীচের মতো প্রতিটি স্তরের পৃথকভাবে অনুসন্ধান করেছি।

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