2017-02-13 48 views
0

我有一個小的bash腳本,經過一些目錄,並刪除內容中他們像這樣:猛砸環(帶圖案的文件夾名稱)

#!/bin/bash 
echo "Start job at: $(date)" 

rm -rf /my/location/log_folder1/* 

exit 0 

不幸的是,我有這些log_folder從1 - > 10.因此,log_folder1,log_folder2,log_folder3等..

我怎樣纔能有效地循環,而不是爲每個rm寫一個單獨的行?

我不想使用find命令來做到這一點 - 我想學習如何循環。

回答

1

鑑於:

$ find . -type d 
. 
./log_folder1 
./log_folder1/sub_log_folder1 
./log_folder1/sub_log_folder2 
./log_folder1/sub_log_folder3 
./log_folder10 
./log_folder2 
./log_folder3 
./log_folder4 
./log_folder5 
./log_folder6 
./log_folder7 
./log_folder8 
./log_folder9 

使用文件名擴展(a 'glob')for loop

01:

$ for fn in log_folder*/*; do 
> rm -rf "$fn" 
> done 

在所得

請確保在"$fn"的文件名周圍使用引號,以便實際刪除您的想法而不是分詞的非預期結果。

或者,你可以使用針對子目錄水珠:

$ rm -rf log_folder*/* 

或者擴展,僅針對一些子目錄,不是所有的:

$ rm -rf log_folder{1..5}/* 

也可以是在for循環中使用。

(我建議小心與rm -rf ....如果你是剛開始接觸的腳本和擴展然而,隨着更多的東西可逆也許練習...。)

+1

這些都會刪除文件夾本身,而OP中的命令只會刪除文件在其中。 –

+1

@BenjaminW .:我把它解釋爲全部,但重新讀你是對的。固定。謝謝 – dawg

+0

@dawg,我有一個問題..所以,我嘗試使用'爲我在/家/我/位置/ A/B /文件夾{1 ..9} /;做rm -rf「$ i *」;完成 - 爲什麼劑量這項工作?非常好奇! – JohnJ

1

使用找到

find log_folder* -delete 
+0

我'想知道如何在bash中循環 - 想用它學習一下! – JohnJ

+0

http://unix.stackexchange.com/questions/162586/proper-way-to-iterate-through-contents-in-a-directory – user2182349

3

你可以用括號擴展做到這一點:

rm -rf /my/location/log_folder{1..10}/* 

見人的bash - 有關詳細說明括號擴展。

括號擴展示例:

$ echo "asd"{1..10} 
asd1 asd2 asd3 asd4 asd5 asd6 asd7 asd8 asd9 asd10 
1

您可以使用此循環:

# using a common base directory makes it a little safer with 'rm -rf' 
fbase=/my/location/log_folder 
for n in {1..10}; do 
    f="$fbase$n" 
    echo "Cleaning up folder $f" 
    rm -rf "$f"/* # this will empty everything under $f, but not $f itself will remain as an empty folder 
    # use 'rm -rf "$f"' to remove everything including the top folder 
done