
基於這個問題,
我嘗試僅刪除結果的第一個資料夾:
find * -type d | head -n1 | -exec rm -rf {} \;
但我收到此錯誤:
bash: -exec: command not found
怎麼了?
答案1
您可以-quit
在使用-delete
或後使用-exec
:
-辭職
立即退出。不會有子進程繼續運行,但不會再處理命令列上指定的路徑。
刪除命令的第一個結果find
:
find * -type d -exec rm -Rf {} \; -quit
或者
find . ! -path . -type d -exec rm -Rf {} \; -quit
後者會找到隱藏的資料夾。
請注意,您的查找輸出可能不按字母順序排序。
對於排序後刪除第一個結果:
find * -maxdepth 1 -type d -print0 | sort -z | head -zn1 | xargs -r0 rm -Rf
對於數字排序,請使用sort -zn
.
答案2
pLumo充分給出了一些很好的替代解決方案在他們的回答中。我提供了一種完全不同的方法。
您會注意到該find
命令,即您使用它來*
描述頂級搜尋路徑的方式,僅真正用於*
尋找擴展為的名稱中的第一個目錄。
您也可以使用 shell 循環來執行此操作,這會使程式碼更易於閱讀並了解其作用:
shopt -s dotglob nullglob
for name in *; do
if [ -d "$name" ] && [ ! -h "$name" ]; then
rm -rf -- "$name"
break
fi
done
這個循環假設它在bash
shell 中運行,迭代所有匹配的名稱*
(包括隱藏名稱)。循環體測試目前名稱是否為目錄(不是目錄的符號連結),如果是,則在退出循環之前遞歸刪除該目錄。
zsh
使用更簡單的指令可以在 shell 中產生類似的效果
rm -rf -- *(D/[1])
這將刪除擴展到的第一個目錄*
。通配限定符將(D/[1])
的符合限制*
為僅目錄 ( /
),但包括隱藏名稱 ( D
),並且僅傳回第一個符合名稱 ( [1]
)。如果目前目錄中沒有目錄,您會從 shell 收到「未找到符合項目」的錯誤訊息。
答案3
這看起來很危險,但你可以嘗試:
find * -type d | head -n1 | xargs rm -rf
答案4
對我來說這段程式碼有效:
- 僅查找帶有 -type f 的文件,
- 過濾不包含“.gz”的文件
- 在本例中選擇 N 個文件,僅選擇第一個 -n 1
代碼:
尋找 。 -輸入f! -名稱“*.gz”|頭 -n 1 | xargs rm -rf {} ;