SHELL程式設計實現批量Netatalk字符集檔名替換
前一段時間遇到一個批量修改檔名的,是一臺debian檔案伺服器,為mac提供檔案共享服務,其中的漢字部分採用編碼方式(查了下資料,應該是的,沒有去實際驗證),具體的編碼原則如下:
一個儲存於linux伺服器中的字元名稱為Product_List:b2:fa:c6:b7:c4:bf:c2:bc,編碼方式為CP936,但已經不會有中文了。編碼的轉換方式為:後面的兩位字元就是對應CP936字符集的一個字元(半個漢字)的HEX內碼,如上面檔名轉換後應該為:Product_List產品目錄,見下面轉換方式。
內碼 GB2312
00000000 B2 FA C6 B7 C4 BF C2 BC 產品目錄
00000008 00 00 00 00 00 00 00 00 ........
00000008 00 00 00 00 00 00 00 00 ........
本案例中因儲存結構變更,需要重新整理,同時原先的MAC平臺及DEBIAN平臺均已報廢多久(這部分資料是存檔資料),所以需要有一種手段將檔名稱轉換為正常的字符集。
我的思路是:先用find查詢所有的含":"的檔案或目錄名稱,再用mv將檔名中的":"批量替換為"%",最後通過convmv將字元轉換為正常的CP936編碼字。
因最近整理資料時發現這個案例,很鬱悶的是,最終的程式方案已經早被我刪除了,無法恢復出來了(虧了我這個資料恢復專家的名頭了,呵呵)。只找到個草稿,先記下來,以後遇到類似情況待查。如果有更好的建議、意見,留言給我。
假設生成的sh檔名為t.sh,內容大致為:
echo >/testsh/t1.sh
echo >/testsh/t2.sh
find $1 -depth -type $2 -name "*\:*" -exec $3 {} \;|while read -r linet
do
line="`echo "$linet"|sed -e 's#)#\\\\)#g' -e 's/(/\\\\(/g' -e 's/&/\\\\&/g' -e 's/:/\\\\:/g' -e "s/'/\\\\\'/g"`"
echo "mv "$line" "`echo "$line"|sed -e 's/\:/%/g' -e 's/\^M//g'`" ;" >>/testsh/t1.sh
echo "convmv --notest --unescape "`echo "$line"|sed 's/\:/%/g'`" ;" >>/testsh/t2.sh
done
chmod +x /testsh/t1.sh
/testsh/t1.sh
chmod +x /testsh/t2.sh
echo >/testsh/t2.sh
find $1 -depth -type $2 -name "*\:*" -exec $3 {} \;|while read -r linet
do
line="`echo "$linet"|sed -e 's#)#\\\\)#g' -e 's/(/\\\\(/g' -e 's/&/\\\\&/g' -e 's/:/\\\\:/g' -e "s/'/\\\\\'/g"`"
echo "mv "$line" "`echo "$line"|sed -e 's/\:/%/g' -e 's/\^M//g'`" ;" >>/testsh/t1.sh
echo "convmv --notest --unescape "`echo "$line"|sed 's/\:/%/g'`" ;" >>/testsh/t2.sh
done
chmod +x /testsh/t1.sh
/testsh/t1.sh
chmod +x /testsh/t2.sh
/testsh/t2.sh
執行上面的sh 後,會生成t1.sh與t2.sh,先不斷的執行“t.sh /data_dir d echo”,等全部執行完成後,再執行“t.sh /data_dir f echo”。
記得直正解決問題時,修正了好多問題,現在也想不太起來了,但思路還是可行的。暫時就這樣記錄吧。
本文轉自 張宇 51CTO部落格,原文連結:http://blog.51cto.com/zhangyu/136416,如需轉載請自行聯絡原作者
相關文章
- grep、sed批量替換檔案內容shell
- 程式設計方式實現MySQL批量匯入sql檔案程式設計MySql
- node實現檔案屬性批量修改(檔名)
- 用python批量替換MD檔案中的圖片地址Python
- 【shell程式設計】目錄檔案計數程式設計
- linux中批量替換文字中字串Linux字串
- 使用shell指令碼替換csv檔案中的資料指令碼
- java批量修改檔名Java
- Linux系統程式設計之程式替換:exec 函式族Linux程式設計函式
- pandas列值根據字典批量替換
- Shell程式設計程式設計
- Shell程式設計 --- Shell介紹程式設計
- 【Perl程式設計-6】正規表示式--替換+轉化程式設計
- windows核心程式設計--字符集Windows程式設計
- [20220329]批量修改檔名.txt
- 如果程式設計替換成中文就會怎樣? 程式設計師看了表示頭疼程式設計師
- iOS使用Shell指令碼批量修改類名稱iOS指令碼
- Linux系統程式設計之程式控制(程式建立、終止、等待及替換)Linux程式設計
- shell程式設計五程式設計
- shell程式設計二程式設計
- Shell程式設計-shell變數1程式設計變數
- 替換專案中的包名
- 實現最簡單的模板替換
- 程式等待和程式替換
- Linux rename命令批量修改檔名Linux
- 批量處理檔名稱(上)
- Shell程式設計-02-Shell變數程式設計變數
- 設計模式例項講解 - 里氏替換設計模式
- Linux之shell程式設計Linux程式設計
- Shell程式設計-基礎程式設計
- Shell程式設計-read命令程式設計
- shell程式設計進階程式設計
- shell 程式設計簡記程式設計
- Linux Shell程式設計(1)Linux程式設計
- Linux Shell程式設計(2)Linux程式設計
- shell程式設計基礎程式設計
- Shell 程式設計入門程式設計
- 初識shell程式設計程式設計
- POI批量替換world文件XWPFParagraph.getRuns 出現分段混亂(附原始碼)原始碼