প্রিন্টযোগ্য অক্ষরগুলির সাথে লিল করার জন্য ls এর কিছু সুইচ রয়েছে (যেমন - কোট নাম, --escape, --literal) তবে এই ক্ষেত্রে এটি অক্ষরটি "মুদ্রণযোগ্য" তবে "টাইপযোগ্য" নয় (কমপক্ষে আমার কীবোর্ডে! ), সুতরাং এইগুলির মধ্যে কোনওটিই সহায়তা করছে বলে মনে হচ্ছে না।
সুতরাং, কোনও নাম হিসাবে কোনও অক্ষর দিয়ে ফাইলগুলি পরিত্রাণ পেতে সাধারণ "বর্বর শক্তি" পদ্ধতির হিসাবে আপনি এটি করতে পারেন:
$ /bin/ls -1A|cat -n # list all files (except . and ..), 1 per line, add line numbers
1 ♫
2 f1.txt
3 f2.txt
আপত্তিজনক ফাইল সহ লাইনটি সন্ধান করুন। বেশ সম্ভবত এটি 1 ম লাইন হবে, তবে আসুন আমরা এটি 5 তম বলি। মুদ্রণ লাইন 5 এবং হেক্স এটিকে এনকোড করেছে:
$ /bin/ls -1A|sed -n 5p|xxd -g 1
0000000: e2 99 ab 0a ....
0a (নিউলাইন) চরিত্রটিকে উপেক্ষা করে একটি পালানোর স্ট্রিং তৈরি করুন এবং এস্কেপগুলি অনুবাদ করতে ইকো -e বিকল্পটি ব্যবহার করুন:
$ echo -e '\xe2\x99\xab'
♫
এখন আপনি এটি অনুলিপি / সরানো / মুছতে পারেন:
$ cp -vi $(echo -e '\xe2\x99\xab') better_name
‘♫’ -> ‘better_name’
এছাড়াও, আপনি যদি শেল স্ক্রিপ্ট ব্যবহারের মধ্যে সীমাবদ্ধ না হন, আপনি পাইথনে এটি এর মতো করতে পারেন:
$ python
>>> import os
>>> os.listdir('.')
[ ..., '\xe2\x99\xab', ... ]
>>> print '\xe2\x99\xab'
♫
>>> import shutil
>>> shutil.copy('\xe2\x99\xab', 'better_name')
এই পদ্ধতির ব্যবহার করে, আপনি অনেকগুলি ফাইল প্রক্রিয়া করতে পারেন, আপনাকে কেবল সঠিক ফাইলগুলি বেছে নেওয়ার জন্য এবং ক্লোবার্বিং ইত্যাদি বাদ দিয়ে তাদের নতুন নামকরণের জন্য যুক্তিটি লিখতে হবে:
for f in os.listdir('.'):
if not f.isalnum():
newname = generate_newname(f)
if not os.path.exists(newname):
shutil.copy(f, newname)
else:
print newname, 'already exists!'
*restoffile.avi
নাকি এরকম কিছু?