文章目录
  • find会把找到所有的item(大括号表示)一次性传递给exec,执行命令cmd,注意必须要对分号转义;
  • 注意: 如果传递给exec的参数过多,在运行一段时间后就会出现参数溢出错误.
  • 在有的系统中会为每一个匹配到的文件发起一个进程,显然这回严重影响系统效率!
  # 递归查找当前目录下的最大文件
  find . -type f -exec stat -c "%s %n" {} \; | sort -nr | head 1
  # 备份每一个.sh文件,可能会为每一个cmd都启动一个新进程.
  find . -name "*.sh" -exec cp {} {}.old \;

xargs

一次只处理一部分文件而不是全部(默认是1个),系统只会启动一个进程!

  # -p: 在执行命令前都要求你确认!
  # -r: 在遇到空的item时退出xargs命令.
  # -t: 先打印命令,然后再执行.
  # -I: -I {}: 使用大括号表每个item
  # -n <NUM>: 表示一次只处理NUM个item.
  # -0: 使用\0来结束每一个item(默认是空格分隔),这样可以处理一些包含特殊字符的文件名,如"空格、\n、/、引号",比如'a b.txt'文件不会被当作2个文件.
  # arg1 arg2 ... argn | xargs <cmd> => cmd arg1; cmd arg2; ... cmd argn;
  ls | xargs -t -i -0 mv {} {}.bak  # 转换为备份文件