-exec和xargs的区别
2010-11-27 星期六 晴朗
当你在命令行执行:
$find . -name ‘core‘ -type f -exec rm {} /;
时,find -exec 命令会对每个匹配的文件执行一个单独的rm操作(execute a separate rm for each one), 正如你手动敲入下面命令:
rm ./bin/core rm ./source/shopping_cart/core rm ./backups/core ...
但是使用这种方式,如果有100个文件匹配了,那么就需要启100个进程,一个进程处理一个rm命令。一般来说,其越多进程,意味着越耗性能。我们可以换个思路,我们将要删除文件当作参数传递给rm不就可以了吗?也就是说:
rm ./bin/core rm ./source/shopping_cart/core rm ./backups/core ...
改成:
rm ./bin/core ./source/shopping_cart/core ./backups/core
但是前提是后面的命令必须支持多参数。相有些命令,比如unzip,就不支持输入多个jar包,所以必须用-exec。
xargs,顾名思义,是对参数进行处理的命令。它的任务就是将输入行转换成下一个命令的参数列表。因此上面的find -exec命令可以改写成:
find . -name ‘core‘ -type f -print | xargs rm
时间: 2024-10-20 04:40:05