xargs
在使用find查找文件情况下是一次批量输出,此处并无不可,但是当查找的文件需要做处理时,可能由于参数列过长或参数列溢出造成信息提示错误,或得不到想输出的结果,
此时find通过管道方式可实现此功能,它的作用是将参数列表转换成小块分段传递给其他命令,避免参数列信息出错问题,并且可得到可用的输出结果。
【实例1】表示查询当前目录下所有普通文件并以长格式方式列出,但是已经输出目录文件,这并不是想输出的结果,使用xargs可实现该功能。
[[email protected] tmp]# find -type f | ls -l total 20 -rw-r--r--. 1 root root 0 Apr 6 10:57 file4 -rw-r--r--. 1 root root 1562 Apr 14 16:41 passwd ----------. 1 root root 1114 Apr 14 16:41 shadow drwxr-xr-x. 2 root root 4096 Apr 14 17:59 test1 -rw-rw-r--. 1 nodelinux nodelinux 0 Apr 14 15:38 test10 -rw-rw-r--. 1 nodelinux nodelinux 0 Apr 14 15:39 test11 -rw-rw-r--. 1 hadoop hadoop 0 Apr 14 15:49 test13 -rw-rw-r--. 1 hadoop hadoop 0 Apr 14 15:49 test14 -rw-rw-r--. 1 hadoop hadoop 0 Apr 14 15:49 test15 drwxr-xr-x. 2 root root 4096 Apr 14 18:09 test2 drwxr-xr-x. 2 root root 4096 Apr 14 18:09 test3 //表示将find查找到的结果输入给xargs,再由"ls -l"处理,此处也可以执行"rm"命令,有点类似 "-exec"但是,可能会造成溢出现象。 [[email protected] tmp]# find -type f | xargs ls -l -rw-r--r--. 1 root root 0 Apr 6 10:57 ./file4 -rw-r--r--. 1 root root 1562 Apr 14 16:41 ./passwd ----------. 1 root root 1114 Apr 14 16:41 ./shadow -rw-rw-r--. 1 nodelinux nodelinux 0 Apr 14 15:38 ./test10 -rw-rw-r--. 1 nodelinux nodelinux 0 Apr 14 15:39 ./test11 -rw-rw-r--. 1 hadoop hadoop 0 Apr 14 15:49 ./test13 -rw-rw-r--. 1 hadoop hadoop 0 Apr 14 15:49 ./test14 -rw-rw-r--. 1 hadoop hadoop 0 Apr 14 15:49 ./test15 //还可实现权限批量修改 [[email protected] tmp]# find -type f | xargs chmod u-w [[email protected] tmp]# ll total 20 -r--r--r--. 1 root root 0 Apr 6 10:57 file4 -r--r--r--. 1 root root 1562 Apr 14 16:41 passwd ----------. 1 root root 1114 Apr 14 16:41 shadow drwxr-xr-x. 2 root root 4096 Apr 14 17:59 test1 -r--rw-r--. 1 nodelinux nodelinux 0 Apr 14 15:38 test10 -r--rw-r--. 1 nodelinux nodelinux 0 Apr 14 15:39 test11 -r--rw-r--. 1 hadoop hadoop 0 Apr 14 15:49 test13 -r--rw-r--. 1 hadoop hadoop 0 Apr 14 15:49 test14 -r--rw-r--. 1 hadoop hadoop 0 Apr 14 15:49 test15 drwxr-xr-x. 2 root root 4096 Apr 14 18:09 test2 drwxr-xr-x. 2 root root 4096 Apr 14 18:09 test3 //列出文件类型 [[email protected] tmp]# find -type f | xargs file ./test13: empty ./shadow: ASCII text ./file3: ASCII text ./passwd: ASCII text ./test10: empty ./test15: empty ./test14: empty ./test11: empty ./file4: empty //查询指定文件,并过滤文件中"hell"内容 [[email protected] tmp]# find -type f -print | xargs grep "hell" ./file3:hello word //查找当前目录下不属于目录文件的所有文件,则将其打包 [[email protected] tmp]# find -not -type d | xargs tar zcvf b.tar.gz ./test13 ./shadow ./file3 ./passwd ./a.tar.gz ./test10 ./test15 ./test14 ./test11 ./Thu ./file4 [[email protected] tmp]# ls Thu b.tar.gz file3 passwd test1 test11 test14 test2 a.tar.gz file15 file4 shadow test10 test13 test15 test3 //一个意思,将当前目录下所有属于普通文件的所有文件打包, [[email protected] tmp]# find -type f -print0 | xargs -0 tar zcvf c.tar.gz ./test13 ./shadow ./file3 ./passwd ./a.tar.gz ./test10 ./test15 ./test14 ./test11 ./Thu ./b.tar.gz ./file4 [[email protected] tmp]# ls Thu b.tar.gz file15 file4 shadow test10 test13 test15 test3 a.tar.gz c.tar.gz file3 passwd test1 test11 test14 test2
时间: 2024-10-06 19:15:04