错误记录 (误用 rmdir /s /q .)

错误记录 (误用 rmdir /s /q .)

起因

今天早上突然想起了,几个月前看到的关于rm -r -f / = 删除根目录下的垃圾(rubbish)文件(file)的笑话,结果中午吃完饭准备删除vsc的垃圾文件时就犯了一个大错.
我想删除C:\Users\Dell\AppData\Roaming\Code\User\workspaceStorage下的所有文件夹,需要先cd到文件夹下,之后rmdir /s /q .命令行应该显示另一个程序正在使用此文件,进程无法访问。 但我实际的操作是(开始在D盘)

rem 本想一路cd,但是太长了
cd /d C:\Users\
rem 于是,我准备用everything 查询 该路径, 并把它传给另一个命令,在该路径下打开一个新的命令行.
es -r "workspacestorage" -n 1 | pass "start /d %0 cmd"

在另一个命令行中

rem 我打开了文件管理器确认文件夹大小,有100G 左右.
explorer .

接着我飞快地打开了一个命令行,并在没有看清当前工作路径的情况下输入的rmdir /s /q .愉悦的回车,接下来出现了很多条没有权限访问的警告.当时意识到有些不对劲,于是按了两次enter一次<Ctrl-c>.神奇的是,我再依次输入这个命令,然后按下<Ctrl-c>,然后意识到自己在做什么的时候我迅速的关掉了这个命令行.缓了一会我先完成了原来的任务.之后回来查看发现之前的命令行已经关闭了,并且我不知道到底删除了什么.打开自己的主目录发现该在的东西还在.重启,并进入使用其它用户登录,也都可以正常运行,但是其他用户的桌面图标似乎是不连续的,但也许是我之前移动的一些图标.

实践

接下来我为了得到rmdir /s /q 的顺序,进行了实验,当然不是在C:\Users目录下在一个test_rmdir目录下,新建一个目录树,使用如下代码

import os,sys
def md(p,n):
	with open(os.path.join(p,'final'),'wb') as f:
		f.write(b'Hello World ')
	if n==0:
		return
	for i in range(10):
		cur=os.path.join(p,chr(ord('a')+i))
		os.mkdir(cur)
		md(cur,n-1)
os.mkdir('test')
md('test',int(sys.argv[1]))

接着python md.py 4 rmdir /s /q test中途使用<Ctrl-c>终止进程,然后进入目录树查看顺序.

结论

Created with Raphaël 2.2.0 rmdir /s /q root 按字典序排序 文件夹不空 删除第一项 文件? del file rmdir root /q 返回 递归 rmdir /s /q subdir yes no yes no

结尾

由于用户目录下的 以"."开头的文件和文件夹都还在所以我觉得用户目录没有被删除,Default文件夹也没有被删除(因为没有权限).那么到底什么被删除了呢,这真是个很困扰的问题.因为我记得看到拒绝访问时停了几秒钟,没有新的拒绝访问出现.还是不要想这个问题了吧. &-)
应该是到了这里,第一张时刚才测试的,证明default没有权限删除,但是删到了C:\Users%USERNAME%.gradle\caches\4.1\srcipts-remapped路径下的某一个文件夹或文件,第二张是第一次误删*C:\Users\Dell.gradle\caches\4.1*说明这个路径下的文件夹或是文件被修改了.


所以想下一次输入rmrdir /s /q .时还是冷静下来看清工作路径再enter吧!

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值