rm -rf 不会删除文件夹内容,而是创建另一个空文件夹

rm -rf 不会删除文件夹内容,而是创建另一个空文件夹

我目前正在为 Minecraft 游戏服务器编写启动脚本。我在此脚本中包含了一个备份脚本。

这个备份脚本运行起来几乎完美,但它不会删除文件夹的内容,而是创建另一个文件夹(类似名称),并且不会对目标文件夹执行任何操作。

我正在使用这个命令:rm -rf "$MINECRAFT_PATH/server.log backups/*"
这个命令在 bash 脚本中执行。

变量$MINECRAFT_PATH确实包含正确的路径。创建的文件夹有此名称:(请注意和server.log.backups之间的点)。但目标文件夹有此名称:。此文件夹确实存在,这不是问题。logbackupsserver.log backups

答案1

Bash 中的双引号会保留内容的大多数文字值,因此您的*glob 会逐字传递给rm,这将尝试删除名为 的文件或文件夹*$MINECRAFT_PATH但 会被替换。

你可能想要的是:

rm -rf "$MINECRAFT_PATH/server.log backups/"*

这将删除文件夹的内容server.log backups

一些替代方案:

  • 您可以更谨慎地编写脚本,从而删除 选项-frm在这种情况下,如果文件夹为空,它将失败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
    

相关内容