shutil.rmtree不会删除Windows上的只读文件.有一个python相当于"rm -rf"?为什么哦为什么会这么痛?
如何制作.BAT文件完成后自行删除?我有一个简单的bat文件终止进程.我希望.BAT文件删除自己.
我写这个PHP脚本删除超过24个小时,较旧的旧文件,但它删除了所有,包括较新的文件:
<?php
$path = 'ftmp/';
if ($handle = opendir($path)) {
while (false !== ($file = readdir($handle))) {
if ((time()-filectime($path.$file)) < 86400) {
if (preg_match('/\.pdf$/i', $file)) {
unlink($path.$file);
}
}
}
}
?>
Run Code Online (Sandbox Code Playgroud) 前段时间我学会了rsync删除文件比许多其他工具快得多.
几天前,我在Serverfault上遇到了这个精彩的答案,这解释了为什么rsync删除文件非常好.
从那个答案的报价:
我今天重访了这个,因为大多数文件系统以btree格式存储它们的目录结构,删除文件的顺序也很重要.当您执行取消链接时,需要避免重新平衡btree.因此我在删除之前添加了一个排序.
你能解释一下如何按顺序删除文件来阻止或减少btree重新计算的数量?
我期望答案显示如何删除以增加删除速度,详细说明btree级别发生的事情.写作的rsync人和另一个程序(参见问题中的链接)使用这些知识来创建更好的程序.我认为让其他程序员有这种理解能够写出更好的软件是很重要的.
目录c:\ test中有50个左右的文件,没有子目录.
If IO.Directory.Exists("C:\test") Then
IO.Directory.Delete("C:\test", True)
End If
IO.Directory.CreateDirectory("C:\test")
Run Code Online (Sandbox Code Playgroud)
Drive C是Intel的X25-M80 SSD驱动器,OS是支持TRIM的Windows 7 64位,Visual Studio是2008年的目标框架3.5.执行上面的代码时,CreateDirectory会在没有(可见)异常的情况下中断代码执行.经过一番头疼后,我发现在代码执行到CreateDirectory的时候还没有完成删除.如果我像这样修改我的代码:
If IO.Directory.Exists("C:\test") Then
IO.Directory.Delete("C:\test", True)
End If
Threading.Thread.Sleep(2000)
IO.Directory.CreateDirectory("C:\test")
Run Code Online (Sandbox Code Playgroud)
一切都按预期工作.
我在这里明显的WTF旁边的问题是:
为了删除"myfolder"中的所有".svn"文件/文件夹/子文件夹,我在批处理文件中使用这个简单的行:
FOR /R myfolder %%X IN (.svn) DO (RD /S /Q "%%X")
Run Code Online (Sandbox Code Playgroud)
这有效,但如果没有".svn"文件/文件夹,批处理文件会显示一条警告:"系统找不到指定的文件." 这个警告非常嘈杂,所以我想知道如何让它理解,如果它没有找到任何".svn"文件/文件夹,他必须跳过RD命令.
通常使用通配符就足够了,但在这种情况下我不知道如何使用它们,因为我不想删除扩展名为.svn的文件/文件夹,但我想删除名为"的文件/文件夹". svn",所以如果我这样做:
FOR /R myfolder %%X IN (*.svn) DO (RD /S /Q "%%X")
Run Code Online (Sandbox Code Playgroud)
它不会删除名为".svn"的文件/文件夹了.我也尝试了这个:
FOR /R myfolder %%X IN (.sv*) DO (RD /S /Q "%%X")
Run Code Online (Sandbox Code Playgroud)
但它也不起作用,他什么也没删除.
我正在尝试以编程方式删除文件,但该文件显然正在被另一个进程使用(这恰好是我的程序).基本上,程序通过使用FromUri来创建一个Bitmap来加载文件夹中的图像,然后将其加载到Image数组中,然后该数组又成为stackpanel的子项.不是很有效,但它的工作原理.
我已经尝试清除stackpanel的子节点,并使数组中的图像为null,但我仍然得到IOException告诉我该文件正由另一个进程使用.
有没有其他方法从我的应用程序的进程中删除该文件?
我即将在TortoiseSVN中做一个提交,涉及重新安排很多文件和目录.在"提交"窗口中,有几个文件的文本状态为"已删除"或"已添加",但其他文件状态为"已删除(+)"或"已添加(+)"的文件.(+)是什么意思?
(对于一个加号来说谷歌很难,而且"加号"这个词在蓝色叠加图标上显示了大量的点击,意思是"添加")
Windows 2008 R2 - 内核(系统进程PID = 4)长时间锁定文件和文件夹.例如,当删除文件时,文件可能会保持锁定1分钟或更长时间,并且只有在删除之后才能保持锁定状态.在另一些情况下,我遇到了无法删除的文件或文件夹.ProcMon显示系统进程持有这些资源的句柄几分钟然后发布它们我提到的资源都不是系统资源,只有我安装的文件和文件夹由我的应用程序处理.
我使用以下命令删除超过一年的文件.
find /path/* -mtime +365 -exec rm -rf {} \;
Run Code Online (Sandbox Code Playgroud)
但是,现在我要删除修改时间早于2014年1月1日的所有文件
我怎么在linux中做到这一点.
delete-file ×10
file ×5
batch-file ×2
directory ×2
process ×2
svn ×2
.net ×1
algorithm ×1
b-tree ×1
c# ×1
filesystems ×1
find ×1
kernel ×1
linux ×1
locking ×1
php ×1
python ×1
tortoisesvn ×1
wpf ×1