|
今天我们来测试一下Linux下面删除大量文件的效率。
( \; @# b0 D4 D- _3 N$ B3 m& S
首先建立50万个文件
1 ]+ O: \. `* H3 b- $ test for i in $(seq 1 500000);do echo text >>$i.txt;done
复制代码
. Z. c4 d3 G6 [% `2 t1. rm删除 - & [6 c% E+ g: f9 e
- $ time rm -f *, s8 K. f9 P9 x1 D9 v: ^
- zsh: sure you want to delete all the files in /home/hungerr/test [yn]? y9 y$ L( ` l! p
- zsh: argument list too long: rm$ c& Q* \ {! ^: X# `8 F7 d- \
- rm -f * 3.63s user 0.29s system 98% cpu 3.985 total. z6 L1 U% T! r+ f4 v' ?
- 由于文件数量过多,rm不起作用。
复制代码
5 i3 n. y D5 `# b: j* [2. find删除
! p* O' Q4 {3 y& L" e- $ time find ./ -type f -exec rm {} \;% ~! z5 F% N" O/ k" h2 `2 a/ u" I
- find ./ -type f -exec rm {} \; 49.86s user 1032.13s system 41% cpu 43:19.17 total: [1 ]0 B; s6 G W: G3 E$ Y
- 大概43分钟,我的电脑。。。。。。边看视频边删的。
复制代码 0 d" C$ d1 z/ n# B6 s6 P$ M5 Z
3. find with delete
' t% k: D" n" L* E: U# b- $ time find ./ -type f -delete0 H, s: G/ m8 Z
- find ./ -type f -delete 0.43s user 11.21s system 2% cpu 9:13.38 total
- H, {: ]+ f- w8 W7 Q7 p0 J - 用时9分钟。
复制代码 0 l$ V. U4 M2 }
4. rsync删除
: W: ^5 m* i* ~( j$ a3 `- # 首先建立空文件夹blanktest2 o( I( I2 a) j! ^
- $ time rsync -a --delete blanktest/ test/
* A1 ]' A, w3 A$ X; q - rsync -a --delete blanktest/ test/ 0.59s user 7.86s system 51% cpu 16.418 total/ r! k0 X7 _2 U. t5 m
- 16s,很好很强大。
复制代码
# H* K1 M) h% p& n7 z/ h5. Python删除
6 u/ n- S8 n1 _0 d" z- z- import os% y+ i$ a" @3 O) V; Q7 ]
- import timeit
5 u2 e+ Y; _7 l4 P* e+ o* w - def main():
& @) d- _$ [& R+ x' U$ { - for pathname,dirnames,filenames in os.walk('/home/username/test'):
- M+ k( O `9 G, |/ u+ ]8 R9 Y - for filename in filenames:
4 U D- M# r; _; U: x& W; B - file=os.path.join(pathname,filename)8 l( l7 x; q1 E7 P/ A
- os.remove(file)" b" W% x2 z4 W3 U
- * D) S; H7 t& K) L0 d
- if __name__=='__main__':
' W3 s& c2 [4 h& P6 K - t=timeit.Timer('main()','from __main__ import main')
' r8 U5 P0 _ P - print t.timeit(1)
! \$ R1 J! V W2 @$ p$ s) Z - 14 l# K# I. ~% Y+ Z. \
- 2+ f a* k8 p' h( _; F/ C
- $ python test.py
; h" [1 R- W$ \( p5 [9 O b - 529.309022903* Z+ S# R4 X: z3 W# f6 e4 N2 V
- 大概用时9分钟。
复制代码
# I; v: t6 |8 Y$ W) _% j3 {6. Perl删除 - , b8 h) j! Y' a$ |
- $ time perl -e 'for(<*>){((stat)[9]<(unlink))}'
" E' n) A( y9 `5 \: I$ m6 r - perl -e 'for(<*>){((stat)[9]<(unlink))}' 1.28s user 7.23s system 50% cpu 16.784 total
+ s, @9 F5 I' Q$ q3 p1 w% P6 l - 16s,这个应该最快了。
复制代码
% [/ |; P- `' z/ R; x4 k7、结果: - <font face="Tahoma">& r1 Z7 Z4 ^9 \
- rm:文件数量太多,不可用! O! n& G% z' p/ [$ ~. K; i
- find with -exec 50万文件耗时43分钟
2 |4 V0 t6 H3 } - find with -delete 9分钟1 R6 P4 A7 n3 c0 d9 w1 A
- Perl 16s# b% D4 h7 Z* I, N N% \% B" W
- Python 9分钟8 e* ] Q/ T5 \3 Z% M# M6 b
- rsync with -delete 16s</font>
复制代码 结论:删除大量小文件rsync最快,最方便。
3 z+ p) D; e0 r! n4 x% ]! i |