前两天笔试遇到一个题,怎么删除目录下10万个文件?小弟太菜,求高手指导下

sh/bash/dash/ksh/zsh等Shell脚本
leofun
帖子: 36
注册时间: 2013-01-06 13:19
系统: ubuntu12.10

Re: 前两天笔试遇到一个题,怎么删除目录下10万个文件?小弟太菜,求高手指导下

#16

帖子 leofun » 2013-10-31 10:26

peteryeh64 写了:...我只知道format...rm -r...rm -f...
那我google下。。。谢谢哈
leofun
帖子: 36
注册时间: 2013-01-06 13:19
系统: ubuntu12.10

Re: 前两天笔试遇到一个题,怎么删除目录下10万个文件?小弟太菜,求高手指导下

#17

帖子 leofun » 2013-10-31 10:27

aerofox 写了:如果原题就是这样的,那还真不好整,必须分多情况,例如:

如果目录下有且只有1万个文件个非隐藏的普通文件,那么可以 rm * 或者 ls -Q | xargs rm

如果目录下有 10001 个文件,删除除了 important.txt 以外的文件,那么在 zsh 中可以 rm *~important.txt

如果目录下有 5 万个文件,删除其中1万个文件,且没什么规律,那么只好干苦力了。
额。。。没记错的话就是这样子,没有明确是些什么文件。。。 :em01
leofun
帖子: 36
注册时间: 2013-01-06 13:19
系统: ubuntu12.10

Re: 前两天笔试遇到一个题,怎么删除目录下10万个文件?小弟太菜,求高手指导下

#18

帖子 leofun » 2013-10-31 10:33

oneleaf 写了:对于超多文件的目录,一般用 find , rsync 的用法比较奇特,很少这样干。
我想 或许就是考下 命令吧
头像
youzhiyili
帖子: 2422
注册时间: 2012-03-22 20:42
系统: ubuntu22.04

Re: 前两天笔试遇到一个题,怎么删除目录下10万个文件?小弟太菜,求高手指导下

#19

帖子 youzhiyili » 2013-10-31 11:43

mark
@自由建客 @qy117121 @枫叶饭团 @cikekid @YeLee @jtshs256 @eexpress @ljj_jjl2008 @zhw2101024 @TeliuTe @月下叹逍遥 @leeaman @懒蜗牛Gentoo @灰色小狼 @photor @adagio @JiangHui @phoenixlzx @oneleaf
头像
needle
帖子: 78
注册时间: 2009-12-01 13:34

Re: 前两天笔试遇到一个题,怎么删除目录下10万个文件?小弟太菜,求高手指导下

#20

帖子 needle » 2013-11-01 18:25

问题是这些个文件有什么规律, 有什么要求没有, 比如文件名的规律, 文件大小, 文件类型等~
这么笼统, 答案不就很简单么, 直接删除父目录不就可以了么~ :em05
10万个文件, find 也就几分钟的事~
如果没有规律, 建议建立文件列表索引到一个文本里.
再用vim剥离出要删除的文件列表.

啊, 又学到一个, ls 还有 -Q 选项啊!
我以为ls 我看了个遍~, 看来还有一些不理解啊~, 不知道其适用环境啊~
myshell^_^
xfce4.10最好用了……
舒适的滚轮升起焦点设计,大量快捷键,alt移动,糟糕的桌面图标……
珍爱生命,LFS 三思~
弄钱潮
帖子: 3
注册时间: 2011-08-06 8:36

Re: 前两天笔试遇到一个题,怎么删除目录下10万个文件?小弟太菜,求高手指导下

#21

帖子 弄钱潮 » 2013-11-07 6:58

14 ,15楼说的对,考的应该是怎么对付大量的文件。有时候多到用find都得想很多办法才行。
头像
iceveil
帖子: 34
注册时间: 2013-12-27 11:49
系统: ubuntu 13.10

Re: 前两天笔试遇到一个题,怎么删除目录下10万个文件?小弟太菜,求高手指导下

#22

帖子 iceveil » 2013-12-29 9:51

问题很笼统啊 直接rm -rf 目录/* 就可以吧 没有明确指出需要考虑系统负载吧
$ sudo apt-get install wife

正在读取软件包列表...
完成

正在分析软件包的依赖关系树

正在读取状态信息...
完成

下列软件包有不能满足的依赖关系:

wife: 依赖: house 但是它将不会被安装

wife: 依赖: car 但是它将不会被安装

house,car: 依赖: money 但是它将不会被安装

Error: wife无法被安装
头像
枫叶饭团
帖子: 14683
注册时间: 2010-06-16 1:05
系统: Mac OS X
来自: Tencent
联系:

Re: 前两天笔试遇到一个题,怎么删除目录下10万个文件?小弟太菜,求高手指导下

#23

帖子 枫叶饭团 » 2013-12-29 11:16

我的办法一直是ls *|xargs rm
IO负载超高的说。。。
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 前两天笔试遇到一个题,怎么删除目录下10万个文件?小弟太菜,求高手指导下

#24

帖子 lilydjwg » 2013-12-29 14:59

我前两天干了这个事,btrfs 上十几万个小文件,rsync 了个空目录过去,很快就只剩下目录本身了 =w=
头像
zhw2101024
帖子: 1849
注册时间: 2009-03-28 16:10
系统: Arch debian win7
联系:

Re: 前两天笔试遇到一个题,怎么删除目录下10万个文件?小弟太菜,求高手指导下

#25

帖子 zhw2101024 » 2013-12-29 18:02

lilydjwg 写了:我前两天干了这个事,btrfs 上十几万个小文件,rsync 了个空目录过去,很快就只剩下目录本身了 =w=
敢问这个“很快”是多长时间?有监控io和内存负载吗
一直没有机会做这个事,一大遗憾
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 前两天笔试遇到一个题,怎么删除目录下10万个文件?小弟太菜,求高手指导下

#26

帖子 lilydjwg » 2013-12-29 18:32

zhw2101024 写了:
lilydjwg 写了:我前两天干了这个事,btrfs 上十几万个小文件,rsync 了个空目录过去,很快就只剩下目录本身了 =w=
敢问这个“很快”是多长时间?有监控io和内存负载吗
一直没有机会做这个事,一大遗憾
没。大约几秒吧,最多十几秒。
linvex
帖子: 1
注册时间: 2014-01-08 13:19
系统: windows7

Re: 前两天笔试遇到一个题,怎么删除目录下10万个文件?小弟太菜,求高手指导下

#27

帖子 linvex » 2014-01-08 13:22

如果是遴选删除,为什么我第一反应是用python写。。
eleven.i386
帖子: 67
注册时间: 2011-11-26 12:55
联系:

Re: 前两天笔试遇到一个题,怎么删除目录下10万个文件?小弟太菜,求高手指导下

#28

帖子 eleven.i386 » 2014-01-08 17:32

rsync 删除这种海量小文件 很管用的说... 虽然我没也监控过负载和时间. 不过感觉比直接用rm 或者 xargs 都要快 :em06
头像
zhw2101024
帖子: 1849
注册时间: 2009-03-28 16:10
系统: Arch debian win7
联系:

Re: 前两天笔试遇到一个题,怎么删除目录下10万个文件?小弟太菜,求高手指导下

#29

帖子 zhw2101024 » 2014-01-08 20:23

eleven.i386 写了:rsync 删除这种海量小文件 很管用的说... 虽然我没也监控过负载和时间. 不过感觉比直接用rm 或者 xargs 都要快 :em06
据我所知这跟Linux文件系统的一个特性有关,大多数文件系统都会在优化的时候把多个小文件放在一个inode块里,rm命令会把文件名一个一个发送给系统内核,再由系统内核返回对应的inode块地址,10万个文件光是找到所有inode块的地址就要很长时间了。而rsync在这方面的处理上应该更灵活一些,直接把这个目录底下的所有inode都清空了,效率自然高很多。
上次由 zhw2101024 在 2014-01-10 19:49,总共编辑 1 次。
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 前两天笔试遇到一个题,怎么删除目录下10万个文件?小弟太菜,求高手指导下

#30

帖子 lilydjwg » 2014-01-08 23:40

zhw2101024 写了:
eleven.i386 写了:rsync 删除这种海量小文件 很管用的说... 虽然我没也监控过负载和时间. 不过感觉比直接用rm 或者 xargs 都要快 :em06
据我所知这跟Linux文件系统的一个特性有关,大多数文件系统都会在优化的时候把多个小文件放在一个inode块里,rm命令会把文件名一个一个发送给系统内核,再由系统内核返回对应的inode块地址,10万个文件光是找到所有inode块的地址就要很长时间了。而rsync在这方面的处理上应该更灵活一些,直接把这个目录底下的所有inode都清空了,效率自然高很多。
有证据么?

我只看到 rsync 用 unlink,rm 用 unlinkat,以及一大堆 fcntl。
回复