
我目前正在為我的世界遊戲伺服器編寫啟動腳本。在此腳本中,我包含了一個備份腳本。
此備份腳本幾乎可以完美地運行,但它不會刪除資料夾內容,而是建立另一個資料夾(名稱類似),並且不會對目標資料夾執行任何操作。
我正在使用此命令:rm -rf "$MINECRAFT_PATH/server.log backups/*"
此命令在 bash 腳本中執行。
該變數$MINECRAFT_PATH
確實包含正確的路徑。建立的資料夾具有以下名稱:(注意和server.log.backups
之間的點)。但目標資料夾的名稱是:。該資料夾確實存在,這不是問題。log
backups
server.log backups
答案1
Bash 中的雙引號保留了內容的大部分文字值,因此您的*
glob 會按字面意思傳遞給rm
,這將嘗試刪除名為 的檔案或資料夾*
。雖然被$MINECRAFT_PATH
替換了。
您可能想要的是:
rm -rf "$MINECRAFT_PATH/server.log backups/"*
這將刪除該資料夾的內容server.log backups
。
一些替代方案:
您可以更加防禦性地對腳本進行編程,從而
-f
刪除rm
.在這種情況下,如果資料夾為空,則會失敗server.log backups
,因為 glob 不會按字面意思展開和傳遞,並且不會有名為server.log backups/*
.您可以簡單地刪除
rm -rf
整個資料夾,mkdir -p
然後再刪除它。或者,您也可以簡單地深度優先刪除
server.log backups
資料夾內的所有檔案和資料夾。-mindepth 1
防止父級被刪除:find "$MINECRAFT_PATH/server.log backups" -mindepth 1 -depth -delete