使用rm命令删除文件

17 投票
6 回答
38186 浏览
提问于 2025-04-15 19:20

我想确保我删除的是必要的文件。
我有类似这样的代码:

dir="/some/path/"
file = "somefile.txt"
cmd_rm= "rm -rf "+dir + file
os.system(cmd_rm)

这里的 dirfile 的值是从数据库中获取的。我该如何确保我不会意外地运行 rm -rf / 这个命令呢?
在执行 rm -rf 之前,我应该检查哪些东西?

6 个回答

6

首先,我建议你使用 os.remove()os.rmdir() 这两个函数来处理这类事情。这样写出来的代码会更容易在不同的环境中使用,而且你也不用太担心检查命令的返回结果。

如果你想确认自己要删除的东西(可能不想只检查根目录“/”),你可以对生成的路径使用一些正则表达式,或者给从数据库返回的所有路径加上一个基础路径(这要看你具体在做什么...)。

18

你可以考虑使用 os.remove() 这个方法,因为它比你现在尝试的方式安全得多。

31

如果你只是想删除一个文件,最好不要使用 -r 这个选项。此外,文件名中可能会有空格。

建议使用Python的 os 模块里的函数来处理:

dirname = "/some/path/"
filename = "somefile.txt"
pathname = os.path.abspath(os.path.join(dirname, filename))
if pathname.startswith(dirname):
   os.remove(pathname)

使用 abspath 来规范化路径,并将其与目标目录进行比较,可以避免像 "../../../etc/passwd" 这样的文件名问题。

撰写回答