從網(wǎng)上自動下載的電影字幕文件中,大部分是srt,ass\ssa 這類的文本文件岔擂,另外有些是壓縮包(目前只有 rar 和 zip)赛不。需要批量解壓這些文件惩嘉,并清理不合格文件和目錄。
我大概想了想踢故,shell 腳本應該是相對輕量文黎、簡單而且代碼量小的方式了,于是寫了這個我平生第一個有用的 shell 腳本殿较。
腳本功能:遍歷 subtitle 目錄耸峭,然后在電影目錄下的英文(eng)目錄執(zhí)行一些操作:
- 如果是壓縮文件,解壓
- 清理子目錄
- 清理壓縮包
- 清理多文件目錄
- 清理非指定格式文件
- 更新數(shù)據(jù)庫
#!/bash/bin
source ./mysql.sh
for dir in `ls subtitle`
do
echo 正在處理 $dir
dir_eng=subtitle/$dir/eng
if [ -d $dir_eng ]; then
file=`ls $dir_eng `
# 解壓 zip 和 rar, overwrite mode
if [[ "$file" =~ zip$ ]]; then
unzip -q -o "$dir_eng/*.zip" -d $dir_eng
elif [[ "$file" =~ rar$ ]]; then
rar x -inul -o+ "$dir_eng/*.rar" -d $dir_eng
fi
echo ' 已解壓'
#### 解壓后,處理目錄: ####
# 1. 刪除 eng 下的所有目錄
dir_in_eng=`ls -l $dir_eng | grep -E "^d"`
if [ "$dir_in_eng" != "" ]; then
find $dir_eng/* -type d | xargs rm -rf
fi
# 2. 刪除所有壓縮文件
rm -f $dir_eng/*.{zip,rar}
# 3. 清空多文件目錄
file_num=`ls $dir_eng | wc -l`
if [ $file_num -gt 1 ]; then
rm $dir_eng/*
fi
# 4. 不是 srt 和 ass/ssa 的文件刪除
# grep 貌似不支持環(huán)視, -P 使用 Perl 語法
err_file=`ls $dir_eng | grep -Po '.*(?<!srt|ass|ssa)$'`
if [ -n "$err_file" ]; then
rm -f $dir_eng/$err_file
fi
echo ' 文件清理已完成'
fi
# 5. 空目錄需要更新數(shù)據(jù)庫
file_num=`ls $dir_eng | wc -l`
if [ "$file_num" = "0" ]; then
mysql $SQLINFO "UPDATE subtitle SET subtitle_eng='' WHERE zmk_id = $dir"
echo ' 數(shù)據(jù)庫已更新'
fi
echo -e ' 子任務結(jié)束\n'
done