我目前正在为 Minecraft 游戏服务器编写启动脚本。我在此脚本中包含了一个备份脚本。
这个备份脚本运行起来几乎完美,但它不会删除文件夹的内容,而是创建另一个文件夹(类似名称),并且不会对目标文件夹执行任何操作。
我正在使用这个命令: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