windows上測試可以安裝gitlinux中,準備刪除檔案的指令碼deletefile.sh,picture.txt儲存待刪除檔案的檔案路徑,picture資料夾下面有三張待刪除a/b/c.jpg
deletefile.sh指令碼如下:
#!/bin/bash
#shell指令碼 儲存路徑的文字
#./deletefile.sh ./picture.txt
#判斷位置引數是否為1
if [ $# -ne 1 ];then
echo "usage $0 filename"
exit
fi#判斷位置引數是否為檔案
if [ ! -f $1 ];then
echo "the $1 is not a file"
exit
fi#待刪除檔案路徑的文字
filename=$1
echo "filename: $filename" >> info.txt
#計算待刪除的檔案數量(總行數)
num=`sed -n '$=' $filename`
echo "picture delete num: $num"
#逐行讀取檔案內容並刪除對應路徑的檔案
success=0
for i in `cat $filename`
do #成功資訊重定向輸出到info.txt
echo "delete success: $i" >> info.txt
rm -rf $i
success=`expr $success 1`
done
echo "success delete num: $success"
執行./deletefile.sh ./picturewin.txt命令後,許可權不夠,使用chmod命令對shell指令碼賦予許可權chmod 777 ./deletefile.sh
看到列印的語句,命令已經執行,但是最後缺沒有全部刪除,只刪除了最後一張c.jpg
修改picturewin.txt檔案內容,發現只有放在最後一行的資料能被刪除成功,前面的資料都刪除失敗
直接執行三條刪除語句,又是可以成功刪除三張。
#----------------------------test----------------------------------
#for迴圈讀取檔案內容並儲存到picture陣列
n=1for i in `cat $filename`
do picture[$n]=$i
#echo "picture[$n]: $i"
#rm -rf $picture[$n]
n=`expr $n 1`
done
#while迴圈讀取檔案內容並儲存到delete陣列
i=1while read line
do delete[$i]="$line"
i=`expr $i 1`
done < $filename
#遍歷陣列並刪除檔案
#for i in $
#for i in `seq $num`
for ((i=num;i>=1;i--))
do echo "delete success: $"
rm -rf $
done
嘗試將文字內容讀取後存放在陣列,然後再刪除,結果還是一樣。
偶然間發現存放刪除檔案路徑的文字是在windows下建立的,在linux下新建picture.txt檔案,執行./deletefile.sh ./picture.txt命令後,成功刪除。
在linux下和windows下新建乙個文字檔案,注意只是新建,並不向檔案中寫入資料,此時兩個檔案是一樣的。此時的檔案(不管是何處新建的)放在windows下和linux下都是一樣的。
但是一旦修改則不一樣。在linux下修改並儲存,則換行是 n ,在windows下修改並儲存,則換行是 r n 。
並且,一旦修改並儲存,則該檔案的換行是 n 還是 r n 都是不會變了,除非人為的修改,只是修改儲存其中的內容,換行的內容是不會變的。例如:換行是 n 的檔案放在windows下增加乙個換行(使用的編輯工具是nodepad ),windows下增加的換行還是 n ;換行是 r n 的檔案放在linux下增加乙個換行(使用的工具是vim),linux下增加的換行還是 r n 。
系統生成的zip和xlsx檔案帶有日期(如20191212***x.zip),一段時間後需要刪除之前無用的檔案,或者移除檔案到/recyclebin**站中。
#!/bin/bash
#移除/刪除檔案路徑
removefolder="../recyclebin"
dir="./"
#輸入待刪除檔案的日期 ./deletezip.sh 20191212
removedate=$1
#判斷位置引數是否為空
if [ $# -ne 1 ];then
echo "usage $0 removedate"
exit
fiecho "removedate: $removedate"
#獲取資料夾下面所有檔名稱
files=$(ls $dir)
#echo $files
#迴圈遍歷刪除匹配的檔案
for file in $
do #echo $file
# 刪除壓縮包檔案
if [[ $file = $removedate*.zip ]];then
echo "delete $dir/$file"
rm -rf $dir/$file
#echo "remove $dir/$file to $removefolder"
#mv ./$file $removefolder/.
# >> del$removedate.log
fi# 刪除excel檔案
if [[ $file = $removedate*.xlsx ]];then
echo "delete $dir/$file"
rm -rf $dir/$file
#echo "remove $dir/$file to $removefolder"
#mv ./$file $removefolder/.
# >> del$removedate.log
fidone
echo "delete success!"
設定固定時間自動執行指令碼
crontab -e #設定自動執行
51 16 * * 1 sh ../shell/deletezip.sh #設定每個周一的16:51時,自動執行deletezip.sh指令碼
參考:1、shell指令碼刪除目錄下的指定檔案:
2、shell 指令碼刪除資料夾下面指定檔案:
3、shell中字串比較和模糊比較說明:
4、shell指令碼定時刪除檔案:
shell 刪除重複檔案指令碼
摘自 linux shell指令碼攻略 一書,例子在109頁,原理在110頁,原理講解的很好哦!需要了解awk命令 xargs,指令碼中所用的命令在linux shell指令碼攻略一書中都有講解。bin bash ls ls time style long iso awk begin size 5 ...
遞迴遍歷目錄的shell指令碼
bin sh 晚上沒事,用shell寫了個遞迴遍歷目錄的指令碼,本指令碼實現遞迴遍歷指定目錄,列印目錄下的檔名 全路徑 不為別的,就為了以後用著方便。function scandir if then cur dir else cur dir pwd fifor dirlist in ls doif ...
shell指令碼同時刪除多張表
同時刪除表名類似的多張表 引數1是資料庫名 引數2傳表名 bin sh if ne 2 then echo input argument dbname universaltablename exit 1 fimysqlconnect mysql droptable mysqlconnect e se...