ফাইলের নাম থেকে কীভাবে অবৈধ অক্ষর মুছে ফেলা যায়?


47

এগুলির মতো অবৈধ অক্ষরের সাথে আমার কাছে ফাইল রয়েছে

009_-_�%86ndringshåndtering.html

এটা একটা হয় Æযেখানে কিছু ফাইলের নাম গেছে ভুল আছে।

কেবলমাত্র সমস্ত অবৈধ অক্ষর মুছে ফেলার কোনও উপায় আছে?

বা trকোনভাবে ব্যবহার করা যেতে পারে?

echo "009_-_�%86ndringshåndtering.html" | tr ???

5
অক্ষরগুলি সম্ভবত "অবৈধ" নয়, অন্যথায় ফাইল সিস্টেমগুলি সেগুলি সংরক্ষণ করবে না (যদি না আপনি এফএসের জন্য সত্যিই বাজে কিছু না করেন)। নামগুলি সঠিকভাবে প্রদর্শন করতে আপনি নিজের লোকেল (যেমন ইউটিএফ 8 তে) পরিবর্তন করার চেষ্টা করেছেন?
জেমস ও'গোর্মন

উত্তর:


41

একটি উপায় সেড সঙ্গে হবে:

mv 'file' $(echo 'file' | sed -e 's/[^A-Za-z0-9._-]/_/g')

fileঅবশ্যই আপনার ফাইলের নাম দিয়ে প্রতিস্থাপন করুন । এটি আন্ডারস্কোর সহ কোনও বর্ণ, সংখ্যা, সময়সীমার, আন্ডারস্কোর বা ড্যাশ নয় এমন কোনও স্থানে স্থান দেবে with আপনি নিজের পছন্দ অনুযায়ী অক্ষর যুক্ত করতে বা মুছে ফেলতে পারেন, এবং / অথবা প্রতিস্থাপনের অক্ষরটিকে অন্য কোনও কিছুতে বা কিছুতেই পরিবর্তন করতে পারবেন না।


4
আমি ব্যবহার করেছি:f='file'; mv 'file' ${f//[^A-Za-z0-9._-]/_}
লুই

1
নীচে এইচ। হেসের দ্বারা সর্বোত্তম সমাধানটি দেখুন ... (এবং সাথে আমার মজার মন্তব্য :))
জান সিল

31

আমি ধরে নিয়েছি আপনি লিনাক্স বাক্সে আছেন এবং ফাইলগুলি একটি উইন্ডোজ বাক্সে তৈরি হয়েছিল। লিনাক্স ইউটিএফ -8 ফাইলের নামের জন্য অক্ষর এনকোডিং হিসাবে ব্যবহার করে, অন্যদিকে উইন্ডোজ অন্য কিছু ব্যবহার করে। আমি মনে করি এটিই সমস্যার কারণ।

আমি "কনফ্যাম" ব্যবহার করব। এটি এমন একটি সরঞ্জাম যা ফাইলের নামগুলি একটি অক্ষর থেকে অন্য অক্ষরে এনকোডিংয়ে রূপান্তর করতে পারে। পশ্চিম ইউরোপের জন্য এইগুলির মধ্যে একটি সাধারণত কাজ করে:

convmv -r -f windows-1252 -t UTF-8 .
convmv -r -f ISO-8859-1 -t UTF-8 .
convmv -r -f cp-850 -t UTF-8 .

আপনার যদি এটি ডেবিয়ান ভিত্তিক লিনাক্সে ইনস্টল করার প্রয়োজন হয় তবে আপনি চালিয়ে তা করতে পারেন:

sudo apt-get install convmv

এটি আমার জন্য প্রতিটি সময় কাজ করে এবং এটি আসল ফাইলের নামটি পুনরুদ্ধার করে।

সূত্র: লিজওয়েব ল্যাবস


1
এটি আশাব্যঞ্জক দেখাচ্ছে, তবে এনকোডিং কী তা কীভাবে বলবেন তার কোনও ধারণা? আমার একটি ডিরেক্টরি আছে Save the current file in Word 97-2004 format\sco.workflowযা আমার ম্যাকে তৈরি হয়েছে (মাইক্রোসফ্ট অফিসের মাধ্যমে) এবং উপরের এনকোডিংগুলির কোনও প্রভাব নেই।
শ্রীধর সারনোবাত

এটি দেখানো মূল্যবান যে ডিফল্ট রূপান্তরিতভাবে "পরীক্ষা" মোডে চলে, এটি কেবল একটি শুকনো রান সঞ্চালন করে এবং কোন ফাইলগুলিতে এটি সরানো হবে তা আপনাকে জানায়। এরপরে আপনাকে --notestফাইলগুলি পুনরায় নামকরণের অপশনটি দিয়ে আবার চালাতে বলবে ।
কেনি রাশচেয়ার্ট

16

আমি ধরে নিলাম আপনার মানে আপনি ফাইল সিস্টেমটি অতিক্রম করতে চান এবং এই জাতীয় সমস্ত ফাইল ঠিক করতে চান?

আমি এটি করার উপায় এখানে

find /path/to/files -type f -print0 | \
perl -n0e '$new = $_; if($new =~ s/[^[:ascii:]]/_/g) {
  print("Renaming $_ to $new\n"); rename($_, $new);
}'

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


13

Https://stackoverflow.com/questions/2124010/grep-regex-to-match-non-ascii-characters এ উত্তরগুলি অনুসরণ করে আপনি ব্যবহার করতে পারেন:

rename 's/[^\x00-\x7F]//g' *

যেখানে *আপনি নাম পরিবর্তন করতে চান সেই ফাইলগুলির সাথে মেলে। আপনি যদি একাধিক ডিরেক্টরিতে এটি করতে চান তবে আপনি কিছু করতে পারেন:

find . -exec rename 's/[^\x00-\x7F]//g' "{}" \;

renameশুকনো রান করতে আপনি -n যুক্তিটি ব্যবহার করতে পারেন এবং এটি পরিবর্তন না করে কী পরিবর্তন হবে তা দেখুন।


উদাহরণস্বরূপ foreign এবং as এর মতো বিদেশী অক্ষর রাখার জন্য কি এটি সংশোধন করার কোনও উপায় আছে?
বয়স্ক গীক

কেবল দ্বিতীয়টি আমার পক্ষে কাজ করেছিল। সবকিছু একই ডিরেক্টরিতে ছিল তাই আমি নিশ্চিত না পার্থক্য কি ..?
শাওটিহ

1
@ শাউটিহ: -এন এটিকে আসলে চলমান থেকে থামিয়ে দেয়। আমি উত্তরটি পরিষ্কার করব।
naught101

প্রচুর ফাইলের সাথে ডিল করার সময় পুনরায় নামকরণ ধীর হতে পারে। আপনি যদি এই গতি বাড়িয়ে তুলতে চান তবে অনুসন্ধানের জন্য অনুসন্ধানটি চাপ দিন। আমি কীভাবে এটি করব তা নিশ্চিত নই।
isaaclw

13

আমি ভাঙা ইউএসবি স্টিক থেকে ভাঙা ফাইলের নাম সহ কয়েকটি জাপানি ফাইল পেয়েছি এবং উপরের সমাধানগুলি আমার পক্ষে কার্যকর হয়নি।

আমি ডিটক্স প্যাকেজটি সুপারিশ করি:

ডিটক্স ইউটিলিটি ফাইলগুলির সাথে কাজ করা আরও সহজ করার জন্য পুনরায় নামকরণ করে। এটি স্পেসগুলি এবং এই জাতীয় অন্যান্য বিরক্তি দূর করে। এটি 8-বিট ASCII এ এনকোডেড ল্যাটিন -1 (আইএসও 8859-1), ইউটিএফ -8 এ এনকোডযুক্ত ইউনিকোড অক্ষর এবং সিজিআই অক্ষরগুলি রক্ষা করতে বা পরিষ্কার করতে পারবে।

ব্যবহারের উদাহরণ:

detox -r -v /path/to/your/files
সাব-ডিরেক্টরিতে পুনরাবৃত্তি করুন urs
-v কোন ফাইলটির নাম পরিবর্তন করা হচ্ছে সে সম্পর্কে ভারবস হয়ে থাকুন 
-n একটি শুকনো রান জন্য ব্যবহার করা যেতে পারে (শুধুমাত্র কি পরিবর্তন করা হবে তা দেখান)

2
এটি আরও বেশি হওয়া উচিত, আমি চক্রটিকে detoxপুনরায় উদ্ভাবন করার আগে সবার নজর দেওয়া উচিত । ম্যান পৃষ্ঠাটিতে যদি আপনি সন্ধান করেন তবে দেখতে পাবেন এটি নমনীয়তার কারণে এখানে অন্যান্য প্রস্তাবিত সমাধানগুলি .েকে রাখে।
emk2203

যিহিষ্কেল 25:17 - ধন্য তিনি, যিনি দাতব্য ও ভাল নামে নামে এই সমাধানটিকে সমর্থন করেন, কারণ তিনি সত্যই তাঁর ভাইয়ের রক্ষক এবং হারিয়ে যাওয়া সন্তানের সন্ধানকারী।
জান সিলা

অনিচ্ছাকৃতভাবে, পথ 'হতে পারে না।' ডিবিয়ান মধ্যে। আপনি যদি একটি 'ব্যবহার করেন।' এটি কিছুই খুঁজে পায় না।
isaaclw

আমি ভাবছি এটি যদি সত্যিই কাজ করে তবে মনে হয় চীনা অক্ষরগুলি মুছে ফেলা / প্রতিস্থাপন করা হবে, যেমন 的节奏啊, তবে এই অক্ষরগুলি বৈধ ফাইলের নাম।
皞 皞

5

লিনাক্স / উইন্ডোজ এবং এফএটি / এনটিএফএস / এক্সএফএটি-র মধ্যে ফাইলগুলি পোর্টেবল করতে এই শেল স্ক্রিপ্টটি পুনরুক্তি করে একটি ডিরেক্টরি স্যানিটাইজ করে। এটি নিয়ন্ত্রণের অক্ষরগুলি /:*?"<>\|এবং কিছু সংরক্ষিত উইন্ডোজ নাম পছন্দ করে COM0

sanitize() {
  shopt -s extglob;

  filename=$(basename "$1")
  directory=$(dirname "$1")

  filename_clean=$(echo "$filename" | sed -e 's/[\\/:\*\?"<>\|\x01-\x1F\x7F]//g' -e 's/^\(nul\|prn\|con\|lpt[0-9]\|com[0-9]\|aux\)\(\.\|$\)//i' -e 's/^\.*$//' -e 's/^$/NONAME/')

  if (test "$filename" != "$filename_clean")
  then
    mv -v "$1" "$directory/$filename_clean"
  fi
}

export -f sanitize

sanitize_dir() {
  find "$1" -depth -exec bash -c 'sanitize "$0"' {} \;
}

sanitize_dir '/path/to/somewhere'

লিনাক্স তত্ত্বের ক্ষেত্রে কম সীমাবদ্ধ নয় ( /এবং \0ফাইলের নামগুলিতে কঠোরভাবে নিষিদ্ধ) তবে অনুশীলনে বেশ কয়েকটি অক্ষর বাশ কমান্ডে হস্তক্ষেপ করে (যেমন *...) তাই তাদের ফাইলনামেও এড়ানো উচিত।

ফাইল নামকরণ বিধিনিষেধের জন্য দুর্দান্ত উত্স:


1
এটি আমি কি অনুসন্ধান! তবে ফাঁকা জায়গাগুলির সাথে ডায়ারকে সমর্থন করার জন্য কোট যোগ করুন "$ 1" -ডেপথ-এক্সেক বাশ -c 'স্যানিটাইজ "$ 0"' {} \;
মিমভি-রু

1

আপনি যদি এম্বেড করা নতুনলাইনগুলি, মাল্টবাইট অক্ষরগুলি, স্পেসগুলি, শীর্ষস্থানীয় ড্যাশগুলি, ব্যাকস্ল্যাশগুলি এবং স্পেসগুলি হ্যান্ডেল করতে চান তবে আপনার আরও শক্তিশালী কিছু প্রয়োজন হবে, এই উত্তরটি দেখুন:
https://superuser.com/a/858671/365691

যদি কেউ আগ্রহী হয় তবে আমি স্ক্রিপ্টটি কোড.google.com এ রেখেছি: rnf-bash-rename-ਸਕ্রিপ্ট script


এখানে লিঙ্কযুক্ত লিপিটি আমার জন্য সমস্যার সমাধান করেছে
যেরেমিয়া রোজ

0

সাবটাইটেল ফাইলগুলিতে অবৈধ অক্ষর অপসারণ করতে আমি এই ওয়ান-লাইনারটি ব্যবহার করি:

for f in *.srt; do nf=$(echo "$f" |sed -e 's/[^A-Za-z0-9.-]/./g;s/\.\.\././g;s/\.\././g'); test "$f" != "$nf" && mv "$f" "$nf" && echo "$nf"; done
  1. কেবলমাত্র *। এসআরটি ফাইলগুলি প্রক্রিয়া করুন (প্রতিটি ফাইল প্রসেস করার জন্য * * এসআরটি এর জায়গায় ব্যবহার করা যেতে পারে)
  2. A-Za-z, 0-9 সংখ্যা, পিরিয়ড "," এবং ড্যাশ এর "-" অক্ষর ব্যতীত অন্য সমস্ত অক্ষর মুছে ফেলে
  3. সম্ভাব্য দ্বিগুণ বা ট্রিপল পিরিয়ড সরিয়ে দেয়
  4. ফাইলের নাম পরিবর্তন করা দরকার কিনা তা পরীক্ষা করে দেখুন
  5. যদি সত্য হয় তবে এটি এমভি কমান্ডের সাহায্যে ফাইলটির নাম পরিবর্তন করে, তারপরে ইকো কমান্ডের সাহায্যে পরিবর্তনগুলি আউটপুট করে

এটি চলচ্চিত্রের ডিরেক্টরি নামগুলি স্বাভাবিক করতে কাজ করে:

for f in */; do nf=$(echo "$f" |sed -e 's/[^A-Za-z0-9.]/./g' -e 's/\.\.\././g' -e 's/\.\././g' -e 's/\.*$//'); test "$f" != "$nf" && mv "$f" "$nf" && echo "$nf"; done

উপরের মত একই পদক্ষেপ কিন্তু আমি ডিরেক্টরি শেষে একটি সময় অপসারণ করতে আরও একটি সেড কমান্ড যুক্ত

ভবিষ্যতের অতীতের এক্স-মেন ডে (২০১৪) [1080 পি] এতে
পরিবর্তিত হয়েছে:
এক্স-মেন.ডেস.এফ.ফিউচার.পাস্টলি.১০৮০ পি


-2

* ফাইলের জন্য; এমভি "$ ফাইল" $ (প্রতিধ্বনি "$ ফাইল" | সেড-ই 's / [^ এ-জা-z0-9। -] / / g') করুন; সম্পন্ন &


2
আপনার কোডটি কী করে তা আপনাকে ব্যাখ্যা করা উচিত এবং সঠিক ফর্ম্যাটিং ব্যবহার করা উচিত। আপনার কোড ফাইলগুলির নামগুলিতে সংঘর্ষের সূচনা করে মোছার কারণ হতে পারে। এবং পুরো বিষয়টিকে পটভূমিতে চালানো এক ধরণের নির্বোধ।
ক্যাস্পারড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.