首页 > 代码库 > xargs

xargs

find命令与xargs

阅读(217)

一:find查找文件,xargs把find查找到的结果当做输入进行下一步的具体操作

#另外find可以可exec结合执行命令,但是exec是要等find命令执行完成之后才对find执行完成的结果进行操作,然而很不幸的是当文件太多的时候会出现文件队列过长的提示,这是应为linux有个临时内存地址只保存128K的数据,我们有个服务器目录中有数万的文件,要对其进行分类,使用exec就不行,因此就到了xargs大显身手的时候了:

1.1:常用参数:

1.1.1:-0,当sdtin含有特殊字元时候,将其当成一般字符,例如:

[root@saltminion ~]# echo "%" | xargs -0 echo > 1 
[root@saltminion ~]# 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这个标志的时候就停止

 

[root@saltminion ~]# cat 1.txt 
find a test file!
[root@saltminion ~]# cat 1.txt  | xargs -E "test" echo 
find a

1.1.4:-p 当每次执行一个argument的时候询问一次用户

[root@saltminion ~]# cat 1.txt 
find a test file!
技术分享

1.1.5:-n num 后面加次数,表示命令在执行的时候一次用的argument的个数,默认是用所有的 

 

[root@saltminion ~]# cat 1.txt 
find a test file!
[root@saltminion ~]# 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 ,这个例子我没有想到,应该平时都用不到。

xargs