一:find查找文件,xargs把find查找到的结果当做输入进行下一步的具体操作
#另外find可以可exec结合执行命令,但是exec是要等find命令执行完成之后才对find执行完成的结果进行操作,然而很不幸的是当文件太多的时候会出现文件队列过长的提示,这是应为linux有个临时内存地址只保存128K的数据,我们有个服务器目录中有数万的文件,要对其进行分类,使用exec就不行,因此就到了xargs大显身手的时候了:
1.1:常用参数:
1.1.1:-0,当sdtin含有特殊字元时候,将其当成一般字符,例如:
[[email protected] ~]# echo "%" | xargs -0 echo > 1
[[email protected] ~]# cat 1
%
1.1.2:-a file 从文件中读入作为sdtin
# xargs -a /etc/passwd echo > 1
# cat 1
1.1.3:-e flag ,注意有的时候可能会是-E,flag必须是一个以空格分隔的标志,当xargs分析到含有flag这个标志的时候就停止
[[email protected] ~]# cat 1.txt
find a test file!
[[email protected] ~]# cat 1.txt | xargs -E "test" echo
find a
1.1.4:-p 当每次执行一个argument的时候询问一次用户
[[email protected] ~]# cat 1.txt
find a test file!
1.1.5:-n num 后面加次数,表示命令在执行的时候一次用的argument的个数,默认是用所有的
[[email protected] ~]# cat 1.txt
find a test file!
[[email protected] ~]# cat 1.txt | xargs -n2 echo
find a
test file!
1.1.6:-t 表示先打印命令,然后再执行
1.1.7:-i 或者是-I,这得看linux支持了,将xargs的每项名称,一般是一行一行赋值给{},可以用{}代替,可以用于对文件移动等操作。
#find的时间是从执行时间开始往前24小时为一天,如果是-ctime +1则是上一天当前时间之前的文件
# find /data/ftpsite/pmsc/radar/latlon/single/ -type f -mtime +1 | xargs -t -i mv {} /data/ftpsite/pmsc/radar/latlon/history/
# find /data/ftpsite/pmsc/radar/latlon/single/ -type f -mtime +1 | xargs -t -i cp {} /data/history/
# /bin/find /data/ftpsite/pmsc/radar/latlon/single/ -type f -ctime +2 | xargs rm -rf #直接删除匹配到的文件,一定要指定类型,不然匹配到目录也统统删除
# /bin/find /data/ftpsite/pmsc/radar/latlon/single/ -type f -mtime +2 | xargs -t -i rm -rf {} #适用于数量众多的文件删除且显示每一条执行的shell命令
1.1.8:-r no-run-if-empty 当xargs的输入为空的时候则停止xargs,不用再去执行了
1.1.9:-s num 命令行的最好字符数,指的是xargs后面那个命令的最大命令行字符数
1.1.10:-L num Use at most max-lines nonblank input lines per command line.-s是含有空格的。
1.1.11:-l 同-L
1.1.12:-d delim 分隔符,默认的xargs分隔符是回车,argument的分隔符是空格,这里修改的是xargs的分隔符。
1.1.13:-x exit的意思,主要是配合-s使用。
1.1.14:-P 修改最大的进程数,默认是1,为0时候为as many as it can ,这个例子我没有想到,应该平时都用不到。