遍歷刪除文本內路徑上文件
windows上測試可以安裝Git
linux中,准備刪除文件的腳本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文件內容,發現只有放在最后一行的數據能被刪除成功,前面的數據都刪除失敗
:<<!
echo "./picture/a.jpg"
rm -rf ./picture/a.jpg
echo "./picture/b.jpg"
rm -rf ./picture/b.jpg
echo "./picture/c.jpg"
rm -rf ./picture/c.jpg
!
直接執行三條刪除語句,又是可以成功刪除三張圖片。
#----------------------------Test----------------------------------
#for循環讀取文件內容並保存到picture數組
n=1
for i in `cat $filename`
do
picture[$n]=$i
#echo "picture[$n]: $i"
#rm -rf $picture[$n]
n=`expr $n 1`
done
#while循環讀取文件內容並保存到delete數組
i=1
while read line
do
delete[$i]="$line"
i=`expr $i 1`
done < $filename
#遍歷數組並刪除文件
#for i in ${picture[*]}
#for i in `seq $NUM`
for ((i=NUM;i>=1;i--))
do
echo "delete success: ${picture[$i]}"
rm -rf ${picture[$i]}
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文件帶有日期(如20191212xxxx.zip),一段時間后需要刪除之前無用的文件,或者移除文件到/recycleBin回收站中。
#!/bin/bash
#移除/刪除文件路徑
removeFolder="../recycleBin"
dir="./"
#輸入待刪除文件的日期 ./deleteZip.sh 20191212
removedate=$1
#判斷位置參數是否為空
if [ $# -ne 1 ];then
echo "Usage $0 removedate"
exit
fi
echo "removedate: $removedate"
#獲取文件夾下面所有文件名稱
files=$(ls $dir)
#echo $files
#循環遍歷刪除匹配的文件
for file in ${files[*]}
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
fi
done
echo "delete success!"
設置固定時間自動執行腳本
crontab -e #設置自動執行
51 16 * * 1 sh ../shell/deleteZip.sh #設置每個周一的16:51時,自動執行deleteZip.sh腳本
參考:
1、shell腳本刪除目錄下的指定文件:https://blog.csdn.net/iteye_21199/article/details/82476450
2、Shell 腳本刪除文件夾下面指定文件:https://blog.csdn.net/wjy0629/article/details/88568105
3、shell中字符串比較和模糊比較說明:https://blog.51cto.com/dangzhiqiang/2440010
4、shell腳本定時刪除文件:https://blog.csdn.net/weixin_41501644/article/details/98185179