使用rm命令删除文件

web*_*org 13 python file delete-file

我想确保删除所需的文件.我有类似的代码

dir="/some/path/"
file = "somefile.txt"
cmd_rm= "rm -rf "+dir + file
os.system(cmd_rm)
Run Code Online (Sandbox Code Playgroud)

该dir和file值是从数据库中提取.我怎样才能确保我永远不会跑步rm -rf /?

在做之前我应该​​检查什么rm -rf?

sth*_*sth 27

-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)
Run Code Online (Sandbox Code Playgroud)

规范化路径abspath并将其与目标目录进行比较可避免使用"../../../etc/passwd"等文件名.


ink*_*dmn 15

您可以考虑使用,os.remove()因为它比您尝试的更危险.


Kal*_*zar 6

首先,我建议你使用os.remove()和os.rmdir()函数来处理这样的事情.最终会得到更多的可移植代码,并且不再需要检查命令返回.

要检查有效尝试删除的内容(您可能不想只检查"/"),可以在生成的路径上使用一些正则表达式,或者只添加从数据库返回的所有路径的基本路径(取决于您是什么)做...).