【免費註冊】 【會員登入】 【個人資料】 【會員列表】 【論壇幫助】 【論壇搜尋】 【登出論壇】

∮Ω奧米加空間∮
∮Ω奧米加空間∮»技術文件區»【原創】BW 備份筆記

訂覽該主題更新消息 | 將該主題推薦給朋友 發表新主題 發起投票  回覆
作者 主題    
dc
管理員



性別:男
來自:瓦肯星
發表總數:10272
註冊時間: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的個人資料 傳送郵件給dc dc的個人首頁 dc發表的所有文章 送出悄悄話給dc IP:203.*.*.* 編輯  引言回覆 
dc
管理員



性別:男
來自:瓦肯星
發表總數:10272
註冊時間: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
dc的個人資料 傳送郵件給dc dc的個人首頁 dc發表的所有文章 送出悄悄話給dc IP:114.*.*.* 編輯  引言回覆 
所有時間均為GMT+8, 現在是2022-10-08 00:21    
訂覽該主題更新消息 | 將該主題推薦給朋友 發表新主題 發起投票  回覆

快速回覆
主題 ( 回覆文章可以不輸入標題 )
URLs自動分析
有回覆時郵件通知
禁用表情符號
使用簽名

<聯絡我們 - OMEGA - 控制面板>

Powered by Centaur & Joksky & DC, ver 2003.08.14
Copyright ©2002-2008 PHPY.COM


頁面生成時間:0.021146059036255