خیلی خوبه..
مثلا اگه تو منوی راست کلیک یه چیزی بیاد که تمام زیرنویس های انتخاب شده رو ببره به utf-8 خیلی خوب می شه (در همون فایل ها).. و قبلش یه بک آپ بگیره ازشون جهت احتیاط بهتره به نظرم..
خواستم تاپیک جدید بزنم ولی موضوع یکیه دیگه (ولی خب پیشنهاد می کنم به پست اول اضافه بشه):
طبق چیزی که دوستمون گفت: تمام زیرنویس های انتخاب شده به utf-8 می بره و قبلش در یک فولدر بک آپ می گیره ازشون (واقعا ایده خیلی خوبی بود )
فقط فایل پیوست شده رو با نام Convert to UTF8 در مسیر : $HOME/.local/share/nautilus/scripts/
کپی کنید و دسترسی اجرایی بهش بدید : chmod +x $HOME/.local/share/nautilus/scripts/Convert\ to\ UTF8
و تمام!
حالا روی زیرنویس(ها)ی مورد نظر کلیک راست کنید و از قسمت Scripts گزینه Convert to UTF8 رو بزنید!
سلام..
ممنون که این ایده رو عملی کردید.. یه تغییراتی دادم:
#!/bin/bash
# ~/.local/share/nautilus/scripts/
IFS=$'\t\n'
BACK_DIR=".subtitle.backup"
if [ ! -d "$BACK_DIR" ]; then
mkdir ./$BACK_DIR
fi
for fileName in `echo $*`; do
encoding=`file -b "$fileName" | awk {'print $1'}`
if cp "$fileName" "$BACK_DIR"; then
if [ "$encoding" == "Little-endian" ]; then
iconv -f UTF-16LE -t UTF-8 "$fileName" > "./.$fileName.utf8"
mv "./.$fileName.utf8" "$fileName"
elif [ "$encoding" == "Non-ISO" ]; then
iconv -f CP1256 -t UTF-8 "$fileName" > "./.$fileName.utf8"
mv "./.$fileName.utf8" "$fileName"
elif [ "$encoding" == "ISO-8859" ]; then
iconv -f CP1256 -t UTF-8 "$fileName" > "./.$fileName.utf8"
mv "./.$fileName.utf8" "$fileName"
fi
fi
done
چک کردن برای ISO-8859 رو بهش اضافه کردم.. برای من بدون این کار نمی کرد..
یه مشکل دیگه هم در convert کردن فایل هایی که تو نامشون space هست وجود داشت.. که اون رو حل کردم.. در عوض یه مشکل دیگه به وجود اومد.. و اونم این که حالا فقط یه فایل رو می شه convert کرد و چند تا فایل رو به صورت همزمان نمی شه..:
cp: cannot stat 'b (4th copy).srt b (5th copy).srt b (another copy).srt b (another copy)d.srt': No such file or directory
راه حل درستش چیه..؟ کسی ایده ای به ذهنش می رسه..؟
الان بخوام بهتر توضیح بدم:
در اسکریپت قبلی اگه یه فایل تو نامش space بود از محل space تقسیم می شد اسم و به مشکل می خوردیم..
پس تو اسکریپت جدید برای این که این تقسیم شدنه اتفاق نیافته این متغیر رو از این مقدار:
IFS=$' \t\n'
به این مقدار تغییر دادم:
IFS=$'\t\n'
ولی خوب این کار خودش یه مشکل دیگه رو ایجاد می کنه.. که پیغامش خطای cannot stat رو بالا گذاشته بودم..
برای این که متوجه بشید اون پیغام خط از کجا می آد می تونید nautilus رو این جوری اجرا کنید..:
nautilus -q
nautilus --no-desktop
و پنجره رو نبندید تا پیغام ها رو بخونید..
بعد که اسکریپت رو با انتخاب این چند فایل اجرا می کنید:
b (4th copy).srt
b (5th copy).srt
b (another copy).srt
b (another copy)d.srt
اون پیغام می آد..
چون آرگومان ها به این شکل با space دریافت شده:
b (4th copy).srt b (5th copy).srt b (another copy).srt b (another copy)d.srt
که خوب الان با تنظیم کردن اون IFS گفتیم دیگه از محل space ها نام فایل رو جدا نکن که حداقل واسه فایل هایی که نامشون space داشته مشکلی ایجاد نشه.. ولی خوب الان این خط بالا کلش یه نام فایل در نظر گرفته می شه..
حالا نکته اینه که اصن برفرض که ما می خواستیم از محل space ها جدا کنیم.. از کجا معلوم که از کدوم محل ها باید جدا کنیم..
مثلا احتمالش هست که b دوم آخرین کاراکتر فایل اول بوده باشه نه اولین کاراکتر فایل دوم..