文章目录
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 # 转换为备份文件