∮Ω奧米加空間∮»技術文件區»【原創】BW 備份筆記
| 作者 |
主題 |
dc
管理員

性別:男
來自:瓦肯星
發表總數:11573
註冊時間:2002-05-07 16:32 |
(第 1 篇) 【原創】BW 備份筆記
目前現有公開與私人的 bookwalker 備份方案都是從 Web viewer 去撈切割過的圖檔由 CDN 上下載下來,然後使用 Python 去還原切割過後的檔案。
下載下來是一包 zip 檔案,py 處理過後轉成 bmp 檔有點大,自己將檔案壓成 rar 檔備份與上傳雲端,再手動壓成 jpg 方便平板閱讀。
怕太久沒用忘記怎麼操作來做個筆記。
環境
1.需要 Python 3 (開發者使用 3.8 版本,其他版本未測試)
2.需安裝 Pillow 庫,安裝方式 pip install pillow
3.瀏覽器上的任何用戶腳本管理器擴展(開發者只在 Chrome/Firebox 上使用 ViolentMonkey 進行了測試,但 TM 和 GM 應該都可以工作。)
使用方式
1.chrome 安裝 ViolentMonkey
https://chrome.google.com/webstore/detail/violentmonkey/jinjaccalgkegednnccohejagnlnfdag?hl=zh-TW
按下 + 建立腳本

將 UserScript xx.xxxx.js 內容建立進去儲存。
2.打開任何關於 BW/BW-TW 的書籍,使用右上角的面板進行操作(應該是不言自明的,給他一點時間統計)。
之後會下載檔案 (**** [BW].zip) ,使用 Python 腳本對其進行處理:python xx.py "{yourfile.zip}"
只有多本的話自動化處理比較快~我買超過100本...
zip 檔與相關檔案放在同一層
vi bw.sh
| 代碼: | #!/bin/bash
#宣告處理完成的檔案路徑
ok="/download/bw/ok/"
#宣告存放原始zip檔案路徑
so="/download/bw/so/"
#僅撈出執行目錄下第一層的 zip 檔案,去掉 ./ 只取檔名
filename=`find ./ -maxdepth 1 | grep -E "\.zip|\.ZIP" | sed "s/^\.\///g"`
#echo $filename
#一行一行加入陣列多檔案處理
IFS=$'\n'
array=($filename)
#將輸入陣列的檔案名稱依次處理
for filename in "${array[@]}"; do
echo $filename
#echo ${#array[@]}
if [ -f "$filename" ]; then
echo "取得檔案名稱:"$filename
echo "執行"
echo python3 bw.py \"$filename\"
python3 bw.py "$filename"
else
echo "檔案不存在"
fi
#檔案歸檔並使用 rar 壓縮打包處理過後的檔案
delzip=${filename%.zip}
if [ -d "$delzip" ]; then
echo "取得目錄名稱:"$delzip
echo "執行"
echo "mv \"$filename\" \"$so$filename\""
mv "$filename" "$so$filename"
echo "執行"
echo "rar a -m0 -v4095000k -rr3 -rv1 \"$ok$delzip.rar\" \"./$delzip\""
rar a -m5 -v4095000k -rr3 -rv1 "$ok$delzip.rar" "./$delzip"
echo "執行"
echo "mv \"$delzip\" \"$ok$delzip\""
mv "$delzip" "$ok$delzip"
echo "mkdir \"$ok$delzip""_jpg\""
mkdir "$ok$delzip""_jpg"
echo "cp \"$ok$delzip/*.jpeg\" \"$ok$delzip""_jpg/*.jpeg\""
find "$ok$delzip/" -maxdepth 1 -name "*jpeg*" -type f | xargs -i cp {} "$ok$delzip"_jpg
#將 bmp 使用 convert 轉成 jpg 寫入 ps2v.sh
filedd=$(echo $delzip | sed 's/(/\\(/g;s/)/\\)/g;s/\[/\\[/g;s/\]/\\]/g')
find ./ | grep -E "$filedd" | grep -E "\.bmp" | grep -v "@eaDir\|raw" | sort | awk -v awk_newname="ps2v.sh" 'BEGIN {FS="/"}
{
bmpjpg=$5
gsub(/.bmp/,".jpg",bmpjpg)
print "convert \""$1"/"$2"/"$3"/"$4"/"$5"\" \""$1"/"$2"/"$3"/"$4"_jpg/"bmpjpg"\"" >> awk_newname
}'
chmod 755 ps2v.sh
ls -l "$ok$delzip"
ls -l "$ok$delzip.rar"
ls -l "$so$filename"
else
echo "zip 目錄不存在"
fi
done
#執行 ps2v.sh
sh ps2v.sh
#更名備查
today=$(date +"%Y%m%d%H%M%S")
mv ps2v.sh ps2v_$today.sh |
sh bw.sh 檔案就會自動歸檔囉~
Your mind to my mind,
your thought to my thought |
| 發表時間:2022-07-29 17:18 |
|
dc
管理員

性別:男
來自:瓦肯星
發表總數:11573
註冊時間:2002-05-07 16:32 |
(第 2 篇)
8.0 新增了無損換塊的功能,安裝庫需增加 bitarray
pip install pillow bitarray
jpegtran.exe 是給 Windows 系統使用,放在 path 路徑裡即可。或是直接放在 bw.py 路徑裡也可以。
跟先前的版本比較不用 jpg 轉 bmp 後再用 convert 從 bmp 轉 jpg 多一個工。
直接用 jpegtran 無損換塊 dpi 略增。
目前 8.1 版本在 Windows 上執行沒問題,但是在 Linux 上執行會出現錯誤訊息如下
FileNotFoundError: [Errno 2] No such file or directory: 'jpegtran -crop xxxxx'
改用 os.system() 來執行即可
首先需先安裝 sudo apt install libjpeg-progs
來取得 Linux 版本的 jpegtran
安裝完畢後 jpegtran -h 來看是否安裝成功
使用 os.system() 兼容 Windows 與 Linux
後來請教作者後改版 8.2 更簡潔雙平台就沒問題啦~
原來 run 用 list 作為 input 和單個 string 是不一樣的
參考
https://stackoverflow.com/questions/18962785/oserror-errno-2-no-such-file-or-directory-while-using-python-subprocess-wit
https://docs.python.org/3.10/library/subprocess.html#frequently-used-arguments
那我們 bw.sh 就需要修改一下啦~
| 代碼: |
#!/bin/bash
#宣告處理完成的檔案路徑
ok="/download/bw/ok/"
#宣告存放原始zip檔案路徑
so="/download/bw/so/"
#僅撈出執行目錄下第一層的 zip 檔案,去掉 ./ 只取檔名
filename=`find ./ -maxdepth 1 | grep -E "\.zip|\.ZIP" | sed "s/^\.\///g"`
#echo $filename
#一行一行加入陣列多檔案處理
IFS=$'\n'
array=($filename)
#將輸入陣列的檔案名稱依次處理
for filename in "${array[@]}"; do
echo $filename
#echo ${#array[@]}
if [ -f "$filename" ]; then
echo "取得檔案名稱:"$filename
echo "執行"
echo python3 bw.py \"$filename\"
python3 bw.py "$filename"
else
echo "檔案不存在"
fi
#檔案歸檔並使用 rar 壓縮打包處理過後的檔案
delzip=${filename%.zip}
if [ -d "$delzip" ]; then
echo "取得目錄名稱:"$delzip
echo "執行"
echo "mv \"$filename\" \"$so$filename\""
mv "$filename" "$so$filename"
echo "執行"
echo "rar a -m0 -v4095000k -rr3 -rv1 \"$ok$delzip.rar\" \"./$delzip\""
rar a -m5 -v4095000k -rr3 -rv1 "$ok$delzip.rar" "./$delzip"
echo "執行"
echo "mv \"$delzip\" \"$ok$delzip\""
mv "$delzip" "$ok$delzip"
#因為有保留原始檔所以刪除 raw 目錄與 json 檔案
\rm -r "$ok$delzip/raw"
find "$ok$delzip/" -maxdepth 1 -name "*json*" -type f | xargs -i \rm {}
else
echo "zip 目錄不存在"
fi
done
|
本帖由dc最後編輯於2022-10-06 15:27
Your mind to my mind,
your thought to my thought |
| 發表時間:2022-10-06 13:48 |
|
|
所有時間均為GMT+8, 現在是2025-12-24 05:32 |
|