Linux shell -- find 与 xargs命令

本文详细介绍了Linux下find命令的使用方法,包括如何通过-name参数匹配文件名、-maxdepth与-mindepth参数来限定搜索的层级范围、-type参数指定文件类型等。此外,还介绍了find命令结合-exec与-xargs选项进行文件操作的应用实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

find / -name "*.ini" -exec file {} \;
find / -name "*.ini" | xargs -i file {} 


find ./ -name '*.txt' -type f -print -exec -maxdepth 2 command {}  \;

-name    : 匹配的文件名

-maxdepth   -mindepth     : 指定搜索层上下限

-type    : 指定文件类型,可以是b|c|f|d(块设备|终端|文件|目录)等类型

-print -print0    : 打印匹配的文件名,-print0用于特殊文件名的打印

 -exec command {} \;    : 每找到一个文件,文件名替换到 '{}' 的位置,然后执行 command $filename 。注意-exec选项,在shell中执行时后面要跟一个"\;" (其中'\'表示在shell中对';'的转义),或写成:find . -name '*.txt' -exec command {} ';' 


xargs  -i -n 2 command $args {} 

-i,--replace=[R]    : 依次从标准输入中读取参数替换到指定字段R,然后执行command。若不指定R,则默认替换位置为'{}'的位置;

-n    : 指定每次从输入流读取的参数个数。指定-i,则-n选项失效。若不指定-i和-n,则将所有读取内容填充到$args 位置后面,command只执行依次。


例子:

[root@Ustor orange]# ls
A.txt  B.txt  C.txt  D.txt  E.txt

[root@Ustor orange]# find . -name '*.txt' -exec echo {} '##' \;
./A.txt ##
./B.txt ##
./C.txt ##
./D.txt ##
./E.txt ##
[root@Ustor orange]# find . -name '*.txt' -print -exec echo {} '##' ';'      ##打印名字再执行命令
./A.txt
./A.txt ##
./B.txt
./B.txt ##
./C.txt
./C.txt ##
./D.txt
./D.txt ##
./E.txt
./E.txt ##

[root@Ustor orange]# find . -name '*.txt' | xargs echo '##'          ##全部参数填充
## ./A.txt ./B.txt ./C.txt ./D.txt ./E.txt
[root@Ustor orange]# find . -name '*.txt' | xargs -n 2 echo '##'       ##每次最多填充2个
## ./A.txt ./B.txt
## ./C.txt ./D.txt
## ./E.txt
[root@Ustor orange]# find . -name '*.txt' | xargs -n 2 -i echo {} '##'      ##使用-i逐次替换,-n失效
./A.txt ##
./B.txt ##
./C.txt ##
./D.txt ##
./E.txt ##

[root@Ustor orange]# find . -name '[AB].txt' | xargs -i cp {} {}.bak       ##A,B文件做备份
[root@Ustor orange]# ls
A.txt  A.txt.bak  B.txt  B.txt.bak  C.txt  D.txt  E.txt


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值