技术学习 35 次浏览 3 次回复
withyou

注册会员

发表于 2023-7-10 17:03:27

在LINUX中,经常要删除文件,大多时候使用rm命令就足以应付了,有的时候需要用-f,强制删除,碰到有子目录的时候,需要加-r参数,也就是说,不考虑安全问题,rm -rf filename就可以解决绝大部分问题.先看下rm的一般用法:
也就是说,大多情况下:
*方法一: rm file    # 直接删除*
*方法二: rm -i file   # 删前提示*
*方法三: rm -f file   # 强制删除*
*方法四: rm -rf /dir   # 递归删除*
但是,经常在删除文件时会碰到Device or Resource is busy的情况,这个时候尝试用下面的方法:
*方法五: 使用ps和kill命令查看并删除相应的进程,时候再执行rm删除操作*
*方法六: 使用lsof命令查看使用该文件并用kill删除,再执行rm操作*
*方法七: 使用fuser -kvm /mnt/test命令,再执行rm操作*
   -k参数: 缩写kill
   -v参数: 详细输出
   -m参数: 表面指定的路径为挂载点

方法八: 使用find命令结合-exec命令来删除$ find /tmp -type f -exec rm -rf {} \;方法九: 使用find命令结合xargs命令来删除$ find /tmp -type f | xargs rm -rf

*增量删除*】:
$ mkdir {dirA,dirB}        # 创建测试目录
$ touch dirA/{A1,A2,A3}   # dirA创建三个文件A1,A2,A3
$ touch dirB/{B1,B2,B3}    # dirA创建三个文件B1,B2,B3
目录结构如下:

1) 将dirA的所有文件同步到dirB内,并保留文件的属主,属组,文件权限等信息:
$ rsync -avz dirA/ dirB/
2) 将dirA的所有文件同步到dirB内,并删除dirB内多余的文件
$ rsync -avz --delete dirA/ dirB/
3) 将dirA的所有文件同步到dirB,但是在dirB内除了B3这个文件不删之外,其他的都删除
$ rsync -avz --delete --exclude='B3' dirA/ dirB/
4) 将dirA目录内的A1.txt和A2.txt不同步到dirB目录内
$ rsync -avz  --exclude='A1' --exclude='A2' dirA/ dirB/
5) 将dirA目录内的A1和A2不同步到dirB目录内,并且在dirB目录内删除多余的文件
$ rsync -avz --exclude='A1' --exclude='A2'  --delete dirA/ dirB/
6) 将dirA目录内的A1和A2不同步到dirB目录内,并且在dirB目录内删除多余的文件,同时,如果dirB内有A2和A1这两个被排除同步的文件,仍然将其删除
$ rsync -avz --exclude='A1' --exclude='A2'  --delete-excluded dirA/ dirB/


*海量删除*】:
有时候文件太多,执行rm –rf file* 会报错,进行不下去,这个时候,同样要考虑到rsync同步删除操作,且高效快速,其思路,建一个空目录作为中转,再删除:
rsync --delete-before -avH --progress --stats /tmp/  /yourdir/
-a:     归档模式
-v:     显示全部过程
-H:     保持硬链接文件
-progress  在传输时显示传输过程

这几种方法的使用,几乎可以解决删除操作中碰到的任何问题,但有几点必须注意的问题:
*1). 有挂载点的情况下,一定要执行umount操作*
*2). 不要删除目录的下,执行删除的操作,很愚蠢,不是嘛?*
*3). 如果执行rm -rf /dir1/dir2/dir3/*.*删除不掉的话,尝试删除其父目录rm -rf /dir1/dir2*


所有回复

苹果酱

版主

发表于 2023-7-10 19:55:58

感谢分享,学习了
linux之恋

注册会员

发表于 2023-7-11 09:20:10

感谢分享
shenzuoyan

注册会员

发表于 2023-7-17 10:01:49

感谢分享
您需要登录后才可以发帖 登录 | 立即注册

本版积分规则

发帖之星榜

快速回复 返回顶部 返回列表