xargs与exec详解
一、场景
这个命令是错误的
1
|
find ./ -perm +700 |ls -l |
这样才是正确的
1
|
find ./ -perm +700 |xargs ls -l |
二、用法
1
2
3
4
5
6
7
8
9
10
11
12
|
[root@localhost tmp]# xargs --help Usage: xargs [-0prtx] [--interactive] [--null] [-d|--delimiter=delim] [-E eof-str] [-e[eof-str]] [--eof[=eof-str]] [-L max-lines] [-l[max-lines]] [--max-lines[=max-lines]] [-I replace-str] [-i[replace-str]] [--replace[=replace-str]] [-n max-args] [--max-args=max-args] [-s max-chars] [--max-chars=max-chars] [-P max-procs] [--max-procs=max-procs] [--show-limits] [--verbose] [-- exit ] [--no-run- if - empty ] [--arg-file=file] [--version] [--help] [command [initial-arguments]] Report bugs to <bug-findutils@gnu.org>. |
三、示例
1、压缩所有的日志文件到每一个文件
1
|
find ./ -type f -name "*.log" | xargs -i -t tar -zcvf {}.tar.gz {} |
2、压缩所有的图片文件到一个文件
1
|
find ./ -name *.jpg -type f - print | xargs tar -zcvf images.tar.gz |
3、文件内容替换
1
|
find ./ -maxdepth 2 -name a - print | xargs -t -i sed -i '1 i\111' '{}' |
4、权限修改
1
|
find ./ -perm -7 - print | xargs chmod o-w |
5、查看文件类型
1
|
find ./ -type f - print | xargs file |
6、删除多个文件
1
|
find ./ -name "*.log" -print0 | xargs -i -0 rm -f {} |
7、复制多个文件
1
2
|
find ./ -type f -name "*.txt" | xargs -i cp {} /tmp/ find ./ -type f -name "*.txt" | xargs -I {} cp {} /tmp/ |
三、注意事项
1、加-i 参数直接用 {}就能代替管道之前的标准输出的内容;加 -I 参数 需要事先指定替换字符
2、cshell和tcshell中,需要将{}用单引号、双引号或反斜杠
3、如果需要处理特殊字符,需要使用-0参数进行处理
相比之下,也不难看出各自的缺点
1、exec 每处理一个文件或者目录,它都需要启动一次命令,效率不好;
2、exec 格式麻烦,必须用 {} 做文件的代位符,必须用 \; 作为命令的结束符,书写不便。
3、xargs 不能操作文件名有空格的文件;
综上,如果要使用的命令支持一次处理多个文件,并且也知道这些文件里没有带空格的文件,
那么使用 xargs比较方便; 否则,就要用 exec了。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)