find命令结合exec和xargs使用的区别

    /    2018-08-31

find命令结合exec和xargs使用的区别:

使用-exec选项命令操作示例及结果如下:

[root@oldboy ~]# find . -type f -exec echo oldboyedu { } \ ; 
#<==从命令执行的结果可以看到,每次获得一个文件就输出一次。
oldboyedu ./.viminfo
oldboyedu ./anaconda-ks.cfg
oldboyedu ./install.log
oldboyedu ./install.log.syslog
oldboyedu ./.bash_logout
oldboyedu ./.cshrc
oldboyedu ./ls.txt
oldboyedu ./.bash_history
oldboyedu ./.lesshst
oldboyedu ./oldboy. Log
oldboyedu ./test. txt
oldboyedu ./.tcshrc
oldboyedu ./GB2312.txt
oldboyedu ./.bash_profile
oldboyedu ./.bashrc

使用xargs命令操作示例及结果如下:

[root@oldboy ~] # find . -type f | xargs echo oldboyedu #<==输出结果只有一行,xargs 
获取到所有文件名一次性输出。
oldboyedu ./.viminfo ./anaconda-ks.cfg ./install.log ./install.log.syslog 
./.bash_logout ./.cshrc ./ls.txt ./.bash_history ./.lesshst ./oldboy.log 
./test.txt ./.tcshrc ./GB2312.txt ./.bash_profile ./.bashrc

xargs还能控制每行输出的参数个数,示例如下,更多使用方法见xargs命令。

[root@oldboy ~] # find . -type f | xargs -n 3 echo oldboyedu #<==使用-n 
3指定每次输出3个参数。
oldboyedu ./.viminfo ./anaconda-ks.cfg ./install.log
oldboyedu ././install.log.syslog ./.bash_logout ./.cshrc
oldboyedu ./ls.txt ./.bash_history ./.lesshst
oldboyedu ./oldboy.log ./test.txt ./.tcshrc
oldboyedu ./GB2312.txt ./.bash_profile ./.bashrc

验证区别二的案例:

[root@oldboy ~]# touch “oldboy edu” #<==创建一个文件名带有空格的特殊文件。
[root@oldboy ~]# 11 -h “oldboy edu”
-rw-r--r-- 1 root root 0 May 17 16:30 oldboy edu
[root@oldboy ~] # find . -name "*oldboy*" -exec ls -lh {} \; #<==使用 -exec 
参数正常使用。
-rw-r--r-- 1 root root 0 May 17 16:30 ./oldboy edu
[root0oldboy ~] # find . -name "*edu*" | xargs ls -lh #<==使用 xargs 
命令无法正常打印
ls: cannot access ./oldboy: No such file or directory
ls: cannot access edu: No such file or directory
[root@oldboy ~] # find . -name "*edu*" -print0| xargs -0 ls -lh
-rw-r--r-- 1 root root 0 May 17 16:30 . /oldboy edu

(10)

分享至