【问题标题】:Remove a file forcefuly as in "rm -f" or unlink a filepath from directory forcefully像“rm -f”一样强制删除文件或从目录中强制取消链接文件路径
【发布时间】:2023-03-10 04:48:01
【问题描述】:

我的代码如下 -

#!/usr/bin/env python
import time, glob, os, sys
from datetime import date, timedelta

try:
    dpath = sys.argv[1]+"/"
except:
    print "usage: " + sys.argv[0] +" <dir_path_to_purge_files>"
    sys.exit(1)
print dpath
day_minus_mtime = time.mktime(date.today().timetuple())
g = glob.glob(dpath+"*")
for f in g:
        try:
                if day_minus_mtime > os.path.getmtime(f):
                        os.remove(f)
                        print "Removed: "+f
        except OSError, e:
                print "Not able to Remove: "+f , e

我相信os.remove(file)相当于linux中的“rm file”。

我想知道“rm -f 文件”的等效函数。强制删除文件或强制取消文件路径与目录的链接。

上面的代码也试图清除比今天更早的文件。 我有一种情况,文件没有被删除,因为它由于所有权而被“写保护”。但是当我对同一个文件使用“rm -f”时;它正在被删除。

我认为问一个问题更好,即使这听起来很愚蠢 给自己

【问题讨论】:

  • 对我来说,os.remove() 甚至删除所有权限位未设置且属于不同用户的文件,即os.remove() 为我执行rm -f。请提供您收到的完整错误消息。
  • os.remove/os.unlink(两者都一样)做的基本一样。如果文件没有被ownership删除,那么你也不能使用rm -f删除它。如果这只是权限问题......那么唯一的问题是目录的权限,而不是文件本身,正如@SvenMarnach 提到的那样。
  • 我认为你是对的,这与我运行它的服务器中作为 NFS 安装的 NAS 存储有关。
  • @RicardoCárdenes:文件的所有权在 Linux 上也无关紧要——只要你对目录有写权限,你就可以删除任何人的文件。
  • user@server:/path_to_scripts/Scripts$ /path_to_scripts/Scripts/purgedir.py /path_to_rep_temp/replicate/tmp /path_to_rep_temp/replicate/tmp Not able to Remove: /path_to_rep_temp/replicate/tmp/daf.fefl.20120304.2393.ddl [Errno 2] No such file or directory: '/path_to_rep_temp/replicate/tmp/daf.fefl.20120304095323.2393.20120304094623839.ddl' Not able to Remove: /path_to_rep_temp/replicate/tmp/daf.fefl.20120304.2393.ddl.noidx [Errno 2] No such file or directory: '/path_to_rep_temp/replicate/tmp/daf.fefl.20120304.2393.ddl.noidx'

标签: python linux file rm


【解决方案1】:

rm--force 选项意味着,忽略不存在的文件并且从不提示,根据到我的手册页。

从不提示部分很简单,你的python remove没有提示,对吧?

忽略不存在的文件也很简单:您可以在删除文件之前检查文件是否存在。您有一个小的竞争条件,因为文件可能会在存在检查和删除之间消失。或者您可以捕获 OSError,并验证它是否因为文件不存在而被抛出(OSError: [Errno 2] No such file or directory...)。 OSError 的另一个原因是,您要删除的文件不是文件而是目录。

force 选项具有 mo 权限魔法(至少在我的 linux 上),请记住,删除文件是对目录的写入操作。

【讨论】:

  • 谢谢@JörgBeyer 这回答了我的问题。
  • 为了挑剔,删除设置了粘性位的目录中的文件 - 例如/tmp/ - 还需要文件本身的所有权(除了目录的写权限)。
  • @JörgBeyer:我想,我没有资格投票。
  • 如果您愿意,您可以接受答案 - 无需任何声誉。这与投票不同,请参阅meta.stackexchange.com/questions/5234/…
  • 为了检查异常是否是因为文件不存在,最好检查ex.errno == errno.ENOENT,而不是依赖字符串匹配。
猜你喜欢
  • 2012-11-25
  • 1970-01-01
  • 2020-03-27
  • 2017-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-15
  • 1970-01-01
相关资源
最近更新 更多