[英]Looping through directories in Bash
我要求腳本cd
到一個目錄,然后刪除子目錄中的所有文件,但保留文件夾。 對我需要保留的每個文件使用switch
/ case
有用嗎?
理想情況下,我認為它應該繼續搜索更多的子目錄,而不是我有嵌套循環,只搜索兩個級別。
另一個問題是它跳過帶有空格的文件夾(雖然這不是腳本將運行的卷的問題,現在)。
這是我的代碼:
for i in /Users/YourName/Desktop/Test/* ; do
if [ -d "$i" ]; then
cd $i
for j in "$i"/* ; do
if [ -d "$j" ]; then
cd $j
for k in $(ls *); do
if [ ! $k == "watch.log" ]; then
echo $k
rm -rf $k
fi
done
fi
done
fi
done
你應該使用find
:
for i in $(find . -type d)
do
do_stuff "$i"
done
如果你真的有很多目錄,你可以將find的輸出傳輸到while read
循環中,但是當循環在另一個進程中時,它會使編碼變得更難。
關於空格,請務必引用包含目錄名稱的變量。 這應該允許您處理名稱中包含空格的目錄。
這個怎么樣?
$ find /Users/YourName/Desktop/Test -type f -maxdepth 2 -not -name watch.log -delete
-type
:僅查找文件 -maxdepth
:最多下降兩級 watch.log
-not -name
(combo):從搜索中排除watch.log
-delete
:刪除文件 首先嘗試不使用-delete
標志的上述命令。 這將打印出已刪除的文件列表。
一旦您對列表感到滿意,請將-delete
添加回命令。
使用find? 您可以使用多個參數,包括深度,文件年齡(如stat),燙發等...
find . -maxdepth 2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.