1
2
3
4
5 |
0 $ ls index.skin1 skin1 0 $ find -type f -exec echo file {} \; file ./skin1 file ./index.skin1 |
1
2
3
4
5
6
7 |
0 $ ls index.skin1 skin1 0 $ find -type f | xargs echo ./skin1 ./index.skin1 0 $ find . -name XXX
| xargs cp - R
--target-directory=/tmp 0 $ find . -name XXX
-exec cp - R
{} /tmp \; |
这里大家看到,xargs是把所有找到的文件名一股脑的转给命令。当文件很多时,这些文件名组合成的命令行参数很容易超长,导致命令出错。同时,这也是 find | xargs 这种组合在处理有空格字符的文件名时之所以出错的原因:这时执行的命令已经不知道这些空格那些是分割符、那些是文件名中所包含的!而用exec则不会有这两个问题。下面是一个演示:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 |
0 $ mkdir TEST 0 $ cd TEST /home/xyb/ TEST 0 $ touch "file a" 0 $ touch "file b" 0 $ ls file a file b 0 $ find -type f | xargs rm rm: 无法删除‘./file’: 没有那个文件或目录 rm: 无法删除‘a’: 没有那个文件或目录 rm: 无法删除‘./file’: 没有那个文件或目录 rm: 无法删除‘b’: 没有那个文件或目录 0 $ ls file a file b 0 $ find -type f -exec rm {} \; 0 $ ls 0 $ |
【转】exec xargs的区别,布布扣,bubuko.com
原文:http://www.cnblogs.com/sunada2005/p/3615790.html