美文网首页
find 命令与 xargs

find 命令与 xargs

作者: Alexander_Zz | 来源:发表于2019-05-09 23:24 被阅读0次

前提

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

常用参数

  • -0,当 sdtin 含有特殊字元时候,将其当成一般字符,例如
~]# echo "%" | xargs -0 echo > 1
~]# cat 1
%
  • -a file 从文件中读入作为 sdtin


    image.png
  • -e flag ,注意有的时候可能会是 -E,flag 必须是一个以空格分隔的标志,当 xargs 分析到含有 flag 这个标志的时候就停止

~]# cat 1.txt 
find a test file!
~]# cat 1.txt  | xargs -E "test" echo 
find a
  • -p 当每次执行一个 argument 的时候询问一次用户


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

~]# cat 1.txt 
find a test file!
~]# cat 1.txt  | xargs -n2   echo 
find a
test file!
  • -t 表示先打印命令,然后再执行

  • -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 命令
image.png
  • -r no-run-if-empty 当 xargs 的输入为空的时候则停止 xargs,不用再去执行了

  • -s num 命令行的最好字符数,指的是 xargs 后面那个命令的最大命令行字符数

  • -L num Use at most max-lines nonblank input lines per command line.-s 是含有空格的

  • -l 同-L

  • -d delim 分隔符,默认的 xargs 分隔符是回车,argument 的分隔符是空格,这里修改的是 xargs 的分隔符

  • -x exit 的意思,主要是配合 -s 使用

  • -P 修改最大的进程数,默认是 1,为 0 时候为 as many as it can ,这个例子我没有想到,应该平时都用不到

相关文章

网友评论

      本文标题:find 命令与 xargs

      本文链接:https://www.haomeiwen.com/subject/pbaonqtx.html