shell腳本:遍歷刪除文本內路徑上文件


windows上測試可以安裝Git
file

file
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腳本賦予權限
file
看到打印的語句,命令已經執行,但是最后圖片缺沒有全部刪除,只刪除了最后一張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 。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM