一:腳本功能:
批量處理目錄以及子目錄下的文件格式問題,能夠輕易的將linux格式轉換為dos格式。
二:寫此博客的意義:
1、只是為了熟悉shell腳本,僅此而已
三:下面介紹兩種方法使用腳本:
1、本教程附帶給你腳本,按照教程使用即可,不用過多的了解內部代碼結構。
2、解釋編寫的腳本、可自行學習,如有不理解的地方,歡迎添加QQ:2081795560 進行叫交流學習(有妹子就更好了)。
四:使用腳本介紹:
下載鏈接:
地址1:http://files.cnblogs.com/files/wang-li/UnixChangeWindows.sh
地址2:點擊下載
系統所需要的命令:
1、unix2dos 2、awk 如果沒有此命令,則需要安裝后執行腳本
使用說明:
1、復制腳本至linux機器上,賦給相應的權限(chmod 755 腳本名)。
2、用法1:腳本名 相對路徑 用法2:腳本名 絕對路徑 用法3:復制該腳本到需要轉換的目錄下,直接執行腳本名即可,無需跟路徑
解釋一下用法:
假如我的腳本名為:UCW.sh 需要轉換的目錄為:/home/Test/
進入到UCW.sh所在的目錄下,
賦權限,chomd 755 UCW.sh
下面幾個用法隨意選一個來轉換即可
用法1:./UCW.sh Test/ 此時應該在/home/下執行此腳本
用法2:絕對路徑 ./UCW.sh /home/Test/
用法3:cp UCW.sh /home/Test ,然后執行:/home/Test/UCW.sh
五:解釋編寫的腳本
由於沒有寫函數,所以,代碼有些地方過於重復,所以,解釋一段即可,由於自己的表達能力有限,如果哪位仁兄看到了在下的代碼,歡迎給在下注釋。
1 #!/bin/bash 2 3 if [ -z "$1" ];then #判斷命令是否跟參數,[ -z ] 如果為空 則返回true 4 5 FileName=$(pwd) #獲取當前目錄 6 7 find $PathName -ls | awk '{print $3 " " $11}' | grep '^.*' > $PathName/log.txt #利用find命令嘉awk來獲取 文件的屬性和文件絕對路徑 8 9 grep '^-' $PathName/log.txt | awk '{print $2}' > $PathName/log2.txt #獲取文件屬性以'-'的文件列表,並且獲取文件絕對路徑 10 11 which unix2dos 2> $PathName/error.log #檢測一下用戶是否有unx2dos這個命令,並且將錯誤信息輸入到文件中。其實還可以用$?來檢測的 12 if [ -s $PathName/error.log ];then #錯誤信息內有錯誤輸出,則提示用戶未安裝此命令,並且退出此腳本 13 echo -e "Also need to install the following sofware: unix2dos" 14 rm -rf $PathName/error.log 15 exit -1 #非正常退出 可以用$?來檢測 16 fi 17 18 cat $PathName/log2.txt | while read line #讀入上面已經錄取到的文件列表,開始逐步檢測 19 do 20 echo "unix2dos:${line}" 21 unix2dos $line # 其實整篇腳本核心在此 22 done 23 24 clear 25 echo "runing success" #打印腳本裝換成功 26 else 27 FilePath=$(pwd) 28 29 if [[ $1 == /* ]];then #判斷是否是絕對路徑,還有,我也不知道這個[[ ]]是什么意思,如果誰知道,請告知與我,謝謝 30 PathName=$1; 31 32 if [ -e $PathName ];then # 判斷是否是存在這個目錄 33 echo " " 34 else 35 echo "unix2dos:cannot change $PathName : No such directory" 36 exit -1 #不存在,打印錯誤信息,並且以不正常的形式推出 37 fi 38 39 find $PathName -ls | awk '{print $3 " " $11}' | grep '^.*' > $PathName/log.txt 40 41 grep '^-' $PathName/log.txt | awk '{print $2}' > $PathName/log2.txt 42 43 which unix2dos 2> $PathName/error.log 44 if [ -s $PathName/error.log ];then 45 echo -e "Also need to install the following sofware: unix2dos" 46 rm -rf $PathName/error.log 47 exit -1 48 fi 49 50 cat $PathName/log2.txt | while read line 51 do 52 echo "unix2dos:${line}" 53 unix2dos $line 54 done 55 56 clear 57 echo "runing success" 58 59 else 60 PathName=$FilePath/$1 #由於是覺得路徑,則不需要檢測 61 62 if [ -e $PathName ];then #判斷是否是正常目錄 63 echo " " 64 else 65 echo "unix2dos:cannot change $PathName : No such directory" 66 exit -1 67 fi 68 69 find $PathName -ls | awk '{print $3 " " $11}' | grep '^.*' > $PathName/log.txt 70 71 grep '^-' $PathName/log.txt | awk '{print $2}' > $PathName/log2.txt 72 73 which unix2dos 2> $PathName/error.log 74 if [ -s $PathName/error.log ];then 75 echo -e "Also need to install the following sofware: unix2dos" 76 rm -rf $PathName/error.log 77 exit -1 78 fi 79 80 cat $PathName/log2.txt | while read line 81 do 82 echo "unix2dos:${line}" 83 unix2dos $line 84 done 85 86 clear 87 echo "runing success" 88 fi 89 90 fi 91 92 exit 0 #退出