|
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=/tmp0$ 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 TEST0$ cd TEST/home/xyb/TEST0$ 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