最新要闻
- 天天百事通!保时捷Mission_E原型车在纽伯格林上飞奔
- 一加Ace 2V大促:12+256不到2000元 无塑料支架 前沿资讯
- 大雾致航班取消 乘客骂哭机场员工
- 焦点速看:江苏常州:把惠企的公交车开到企业“家门口”
- 麻省理工学院开发出超吸水性水凝胶 具有巨大的应用潜力
- 为计划支持平稳过渡 谷歌千万域名将全部打包出售
- 网友将梅西亲笔签名纹在了手臂上 网友点评称将永远擦不掉
- 国产开放世界端游《仙剑世界》即将开启首测 研发时间超过两年
- 极兔速递正式向港交所提交上市申请书 2022年包裹量计为东南亚排名第一
- 山东一高校为毕业生举行别有滋味的龙虾宴 引发网友羡慕嫉妒
- 2023端午档期预售票房突破1000万 王宝强新作《八角笼中》备受期待
- 医生发现一男子是正常人骨密度的8倍 车祸后毫发无损
- 媒体曝光C罗与乔治娜曾达成“婚前协议” 若分手女友每个月可获10万欧元补贴
- 北方多地迎来高温天气 网友在线表演无火煎蛋
- 《永劫无间》胡桃1/4限量收藏级雕像即将上线 引入全彩3D仿真眼球
- 百度旗下萝卜快跑开展L4级无人驾驶商业化收费运营 运营时间覆盖早晚高峰
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
【全球新视野】Linux批量文件操作——基于find-xargs
前言
在项目初创阶段,经常会遇到各种文件操作,拷贝头文件,库,批量重命名等。文件结构一复杂,这就将是个无聊的工作。
查找文件
find
可以在目录结构中搜索文件,这是它在man
里面的作用描述。那么怎么搜索呢?有多种方式,按文件时间,大小,按文件名,路径名,按文件类型,权限,按用户。而这些方式又可以通过与或非的逻辑相互组合,完成更苛刻的查找工作,简直是文件查找的福音。通常介绍一种命令都会以命令形式开始,find
的格式如下
(相关资料图)
find [-H] [-L] [-P] [-D debugopts] [-Olevel] [starting-point...] [expression]
[-H] [-L] [-P] [-D debugopts] [-Olevel]这一些统统不重要,[-H] [-L] [-P]是针对软连接的,不常用。[-D debugopts]是显示运行期间的额外信息,信息太乱太杂,用处不大。[-Olevel]则是用于优化查找的,默认的已经够用,所以也没必要深究。find
的最大魔法在最后的[expression]
,下面将以实例的形式讲解这个[expression]
到底该怎么玩,原始的文件结构如下
├── alice.h├── andy│ ├── jack│ │ └── mary.h│ ├── mark.cpp│ ├── mark.h│ └── pony.txt├── andy.c├── bill.cpp├── bill.h├── mark.h└── mary
现在,我想找到以andy
命名的文件,命令该怎么写呢。直觉告诉我们应该是
find andy
但是直觉对吗,我们来看输出
andyandy/mark.cppandy/jackandy/jack/mary.handy/pony.txtandy/mark.h
它只找到了andy
目录,甚至都没找到andy.c
,那么看来我们需要一种方式告诉find
,我们找的东西是文件,不是目录,这个选项就是-type
。-type
后面需要紧跟一个参数,常用取值是d
代表目录,f
代表文件。现在我们需要找到文件,那么就应该加个-type f
的选项。但这就够了吗?执行命令会发现报错了,因为后面的andy
被认为是路径,而我们要找的是文件名啊。所以,这又需要另一个选项的帮忙,-name
。-name
后面可以跟具体的名字或者正则。结合这两个条件,我们得出了最终的命令
find -type f -name "andy*"
这里有两点值得注意,首先-type
和-name
其实是两个独立选项,可以单独使用,也可以联合使用,当联合使用时,他们之间不使用操作符(-o
(Or),-a
(AND),-not
)连接时,就会把-a
单做连接符,也就是所有的条件都满足才回出现在最终的结果中。由此,可以延伸出一种反向的查找方法,
find -type f -not -name "andy*"
这个命令就会查找出所有不以andy
开头的文件。
./andy/mark.cpp./andy/jack/mary.h./andy/pony.txt./andy/mark.h./bill.h./bill.cpp./mark.h./alice.h
另一个值得注意的点是"andy*"
加了双引号,因为*
是特殊字符,所以需要用双引号转椅一下,假如没有特殊字符是不需要添加双引号的。回到最初的命令,为啥第一条我们想当然的命令竟然没有找到我们期盼的目标呢?因为find
是严格匹配的,我们只写了andy
,而遗漏了后缀.c
,这是最容易发生错误的地方。其实,到这里,我们已经学习了这个命令的50%,那剩下的有什么内容呢?记得find
的主要功能吗,里面提到了个目录结构。对的,find
还可以控制查找范围。新需求来了,怎样找到某个目录下所有的直接子.h
文件呢?这里的直接和子合起来的意思是查找范围只能是当前目录,不能查找到当前目录的子目录。在解决这个问题前,我们需要知道一个前置知识——两个目录之间存在两种相互关系,兄弟或者父子。兄弟目录深度相同,父子目录深度相差1。知道了这点,再来看需求——.h
文件很简单,使用-name "*.h"
就能满足。但是,这样会找到andy
目录下的.h
文件,所以我们需要一种控制目录查找层级的东西,他们就是-mindepth
,maxdepth
。这两个参数和前面的不一样,他们属于Global options
。什么是Global options
呢,就是他们的作用是全局性的,并且它们总是返回true
,也就是它们和其他的选项连起来一起查找的时候,只用考虑其他选项的条件。并且,为了凸显它们的全局性,它们在命令书写时,必须写在最前面,否则会触发警告。如下,就是写在了-name "*.h"
前面。
find -maxdepth 1 -name "*.h"
这两个参数有点反直觉,可以这样理解——最多查找到哪里,有个最多,就是maxdepth
,反过来就是从哪里才开始查找,才就是mindepth
。
聊完了目录结构,名字这些显眼的部分,文件还有访问(access
)创建(create
)、修改(modiffy
)时间,权限(permission
),大小(size
)这些没有涉及到,而这些也同样可以作为find
的查找条件,在开始之前,有一些小规则可以对这些选项做个快速分组——选项会以属性的英文首字母作为开始,如
- 时间相关的选项有
time
和min
,分别表示某个事件发生的前n
天和n
分钟,这里的某个事件可以用访问a
(access
)c
创建(create
)、m
修改(modiffy
)替代,它们组合起来就是一个完整的选项,如mmin n
就表示查找修改时间在n
分钟以内的文件。 - 以此类推,
i
代表大小写敏感,如iname
,l
代表link
文件
当然,这些都可能用得不多,实际使用到再查可能还更方便点,但是有两个很好用的选项不得不讲。考虑以下情况,某天老本发来一堆用户日志文件,让你给这些用户根据使用频次分级,你该怎么办呢?首先,我们可以把日志文件大小作为依据,根据最大最小划分好区间,如(0-100M),然后用定好的级别(如5级)划分出每级区间(0-20,20-40,...),这样我们多次运行命令,就能得到所有的分级情况了。想法是美好的,但是find
提供了这种选项了吗?它提供了-size n
。我们来试着查找一下0-20区间的文件
find -size 20M
回车,你会发现结果貌似不完全正确,它可能确实找出了一些满足条件的文件,但是有一些满足的却没有找出,问题出现在哪里呢?原来-size n
中的n
是严格匹配,就是你输入的是20M,它就只找到恰好是20M的文件,而不是我们期望的20M和20M一下的文件。那么有解决方法吗,当然有,就是数字前面加上+
,-
号,+
代表大于等于这个值,-
代表小于。所以我们查找20M以下的文件的命令应该是
find -size -20M
解决了符号问题,还有单位问题值得注意,也就是-20M
中的M
。其实-size
的标准形式是-size [+-]n[cwbkMG]
。[+-]
和n
都说过了,后面的则单位。它们是以大小递增顺序排列的,说明如下
c
:字节w
:双字节,也就是word
b
:512字节构成的块,数字n
后面没加单位的话,这个是默认值k
:1024个字节,也就是kbM
:1024 * 1024个字节,也就是Mbc
:1024 * 1024 * 1024个字节,也就是Gb
说完了单位的事,我们接着来出来20——40的分级,直接把20改为40吗?当然不,改为40找到的就是小于等于40M的文件了,所以我们需要一种区间标定法,find
没有提供直接的选项支持,但是前面说过,选项是可以组合的,也就是我们可以重复使用-size
来标识一个区间。也就是
find -size +20M -size -40M
按照这种方法,多次改变值,就可以完成任务啦。其实上面的方案还有一点小纰漏,就是没有找出直接没用过的用户,也就是size为0的,那把数字改为0,可以吗?答案是可以,但是假如我们想找的是空目录,而不是空文件呢,-size
就不能解决了,因为通常空目录的大小不为0.所以,find
又提供了个检测文件是否为空的选项-empty
,它不仅可以找到空文件,还可以找到空目录。在我们的实例中,使用find -size 0
找到的结果是
./andy/mark.cpp./andy/jack/mary.h./andy/pony.txt./andy/mark.h./andy.c./alice.h
没有找出空目录mary
。而使用find -empty
查找后,结果是
./mary./andy/mark.cpp./andy/jack/mary.h./andy/pony.txt./andy/mark.h./andy.c./alice.h
不仅找到了mary
空目录,其他的空文件也找出来了。至此,find
相关的东西已经了解得差不多了。但是,很多时候仅仅找到并不能完全满足我们的需求,我们可能需要把找到的文件复制到其他地方或者删除之类的,能否把这些操作合起来呢?这就要请我们的xargs
登场了。
xargs
xargs
只有一个简单的功能,就是从标准输入读入内容,构建并执行命令。怎么理解呢?假设我们在执行find
命令,find
命令执行肯定是有过程,有逻辑的。按照一定的逻辑和过程,find
对文件进行逐一评估,假如满足条件,就输出结果。随着命令的执行,结果可能越来越多。假如我们需要对产生的每个结果都执行一条命令呢,这该怎么办?按照一般的思路,当然是将结果保存起来,然后再写个脚本,读取每一条记录,然后执行相应。但是有了xargs
,我们不用这么麻烦了,可以一步到位。我们利用管道符将结果从终端连接到xargs
中,xargs
接收到一条信息,就会将它作为构建命令的参数,就好像我们手动输入了命令那样,构建完成后还会自动执行。最终的结果就是,没产生一个输出,就会产生一条以这个输出为参数的命令,并且这条命令还自动执行,最终的效果就是实现了一条命令实现了多个功能。
将find
和xargs
结合起来
现在我们挑战升级了,有个需求,需要提取目录下的所有头文件到另一个目录。这个需求可以分为两部分,一部分是找到头文件,这可以用find
命令完成。另一部分是复制找到的头文件,这就需要xargs的参与了。
首先是找到头文件。头文件就是以.h
结尾的文件(暂不考虑.hpp
),这个后缀是出现在名字里的,所以我们可以使用-name "*。h"
选项,同时为了避免某些目录名的干扰,我们把类型也做个限定-type f
,只查找文件。这第一步就完成了。第二布就是复制文件啦。复制文件的标准写法是
cp [OPTION]... SOURCE... DIRECTORY
根据这个命令格式,我们需要确定几个参数,源文件当然就是我们查找到的文件啦,这暂时按下不表。目标文件夹,就是我们拷贝到哪里,我们这里暂时就新建一个test
的目录吧,目标文件夹就是test
。这就结束了吗,还没有。头文件往往需要和他的父目录组成一个依赖路径,所以我们把所有的头文件直接一股脑都拷贝到test
目录下是不可取的,这会打乱头文件的依赖关系,我们还得拷贝和头文件相关的父目录。恰巧的是,cp
提供了这样的一个选项-parents
——它可以拷贝源文件的完成文件名,也就是包含目录。所以问题的关键就来到了源文件这个参数上了。
关键词:
【全球新视野】Linux批量文件操作——基于find-xargs
安全攻击溯源-钓鱼邮件溯源 环球滚动
天天百事通!保时捷Mission_E原型车在纽伯格林上飞奔
一加Ace 2V大促:12+256不到2000元 无塑料支架 前沿资讯
大雾致航班取消 乘客骂哭机场员工
焦点速看:江苏常州:把惠企的公交车开到企业“家门口”
环球动态:08. centos安装包方式安装nginx(推荐该方式)
nas docker安装mysql 整理
麻省理工学院开发出超吸水性水凝胶 具有巨大的应用潜力
为计划支持平稳过渡 谷歌千万域名将全部打包出售
网友将梅西亲笔签名纹在了手臂上 网友点评称将永远擦不掉
国产开放世界端游《仙剑世界》即将开启首测 研发时间超过两年
极兔速递正式向港交所提交上市申请书 2022年包裹量计为东南亚排名第一
山东一高校为毕业生举行别有滋味的龙虾宴 引发网友羡慕嫉妒
2023端午档期预售票房突破1000万 王宝强新作《八角笼中》备受期待
医生发现一男子是正常人骨密度的8倍 车祸后毫发无损
媒体曝光C罗与乔治娜曾达成“婚前协议” 若分手女友每个月可获10万欧元补贴
北方多地迎来高温天气 网友在线表演无火煎蛋
《永劫无间》胡桃1/4限量收藏级雕像即将上线 引入全彩3D仿真眼球
百度旗下萝卜快跑开展L4级无人驾驶商业化收费运营 运营时间覆盖早晚高峰
研究结果显示土星发现高浓度磷元素存在 为构成生命的六大基本元素之一
热心市民无意捡到石头竟是新石器时代遗存文物 具有不小的研究价值
快资讯:自研认知大模型 理想汽车带来“一员”真正的家庭成员
理想汽车发布城市NOA:不依赖高精地图 驾驶技术接近人类司机_全球微资讯
双黄蛋!胡歌大鹏获上海电影节影帝|当前快播
苏翊鸣回应获得清华大学保送资格消息 称未来四年将更加努力
因云南昭通突降暴雨引发山洪 135名初三学生的身份证被冲走
因影响公共秩序 冲场拥抱梅西球迷1年内被禁入赛场观看同类比赛
韩国人气女星宋慧乔全新短片曝光 身穿白色衬衫搭配咖啡色长裙且气质优雅
防治荒漠化能有多少种可能?来看看这份“中国良方”_速看料
英特尔将在波兰建造全新半导体组装和测试设施 现等待欧盟委员会批准
深圳邮局海关发现23只活体蜈蚣 其毒腺可分泌出大量毒液
环球看热讯:杀疯了!折叠屏不到4000 moto razr 40明天预售
充电进入5G时代 理想公布800V快充:充电9分半续航400公里-世界快资讯
阴阳师物语vivibear_阴阳师物语-微速讯
世界速递!【MathJax】语法总结
k8s 深入篇———— docker 是什么[一] 全球信息
英伟达RTX 40系列公版显卡今晚20点开抢:3199-12999元
售价超200万的FF 91又鸽了 贾跃亭造车梦何时能成?还差得远!
别人家的学校你羡慕了吗?山东一高校请近300名毕业生吃龙虾宴 环球即时看
618买笔记本电脑!教你看懂屏幕参数
埃安2024款AION V Plus将于6月20日上市:买五座送三排-当前热闻
图片报:拜仁关注哈弗茨,若无缘其他目标图赫尔能设想签他踢前锋
Lua 中如何实现继承
女子买1根牛肉干店员偷塞5根的量 当事人:特别气愤
世界今头条!六个口味 八喜冰淇淋3.8元/杯抄底(商超8元)
堆料不留遗憾的满血顶级非公旗舰!索泰RTX 4090 PGF OC评测:当之无愧新一代卡皇-世界头条
银河证券:通信+新基建板块有望率先预期上修 高景气度结合低估值是选股重点方向
记录--封装一个通过js调用的全局vue组件
世界讯息:Linux下常用命令
vim敲字如弹琴
我找到了阅读GitHub项目源码的最佳姿势,太舒服了!
世界短讯!玩游戏怎么选显示器?认准这几点准没错
男子发现捡回家两年的石头是文物 已无偿捐赠:网友惊叹
全球热推荐:国产GPU能否满足ChatGPT算力要求 景嘉微回应来了:还不行
环球观焦点:今年“蒸煮模式”咋提前了?专家解读
长城汽车给理想汽车起了个外号:“微博之王” 李想本人回应亮了 世界微动态
易宝支付总裁余晨出席《通用人工智能》新书发布会
腾讯太狠:40亿QQ号, 给你1G内存,怎么去重?
天天热点评!ASP.NET Core MVC 从入门到精通之Identity入门
世界今热点:对建造清代故宫影响最大的工匠,原来是这一家人!
合资品牌的无奈!奥迪之后丰田挂牌:我们也有纯电动请往里进
苹果Mac OS被指碰瓷WinXP经典壁纸:还真不是玩笑
世界快资讯:年轻人压力较大 乘联会崔东树:中国车市还得指望中老年人
又一新能源车企被申请破产!曾被称为“四小龙”之一
珠碱商品报价动态(2023-06-17)
看点:只需4年 PCIe 7.0硬盘有望追上DDR5内存:性能狂飙
人不在学校却被抬到校长面前拨穗 全场欢呼鼓掌:不想让舍友留下遗憾
嫌榴莲太臭?可它这3个好处“香”到不行!
《闪电侠》豆瓣8分:超七成观众给出4星以上好评
生来上等命,前有贵人,后有靠山,注定好运不断的星座,日后必成大器
3999元起 蔚来天穹车尾帐发布:10分钟快速搭建“一室一厅”
腾讯、网易游戏公布端午未成年人限玩时间:高考后准大学生仍被限
天天快看:中国车第一次!领克03高性能特别版首发:原厂防滚架可上路
酷睿i9-13700H VS.锐龙9 7940H全面对比:AMD仍有很长的路要走
天天热推荐:布林肯冀访华改善中美沟通避免引发冲突 中方促美尊重核心关切
今日热门!分心驾驶致5人身亡 家属质疑10个气囊全未弹开 丰田销售:后方撞击不能触发
深圳邮局海关查获23只外来毒虫!内含秘鲁巨人蜈蚣 天天通讯
宣布对西安工厂投资43亿元:消息称美光也要向印度投资10亿美元
韩方曝出:福岛核污水超标2万倍
比小米便宜一半!TCL雷鸟Mini LED电视85英寸只要7599元 焦点简讯
理想L7/8/9魔毯空气悬挂2.0实测:防刹车点头来了 _环球滚动
GPT-4满分通过MIT本科数学考试!这套提示词火了
看热讯:10万出头续航505km 江淮钇为3上市:打的就是比亚迪海豚
不靠高精地图!小鹏汽车演示北京无图区智能辅助驾驶:稳如老司机_全球今亮点
Android-JNI开发概论-动态
鲍威尔_1937~_关于鲍威尔_1937~简述_消息
全球今日讯!华为NCA智能驾驶来了!余承东:超越特斯拉FSD 这15个城市率先体验
vivo X90s跑分出炉:165万安卓性能天花板!领先20万-全球实时
从泰山弃将到亚泰宠儿,莱昂纳多逆袭霸榜,机会总留给有准备的人-每日速递
软件开发人员必须阅读的20本书_每日速看
快资讯丨语音社交源码知识语音房间功能的实现
《安富莱嵌入式周报》第315期:开源USB高速分析仪,8GHz示波器开发, 600行C编写RISC-V内核,英特尔推出用于开发人员等宽字体,便携物联网监测器_
韩国出现地产危机房价暴跌近20%?可以“免费住”的全租房模式暗藏风险
网友吐槽“高考后还要被防沉迷” :腾讯游戏官方高情商回应
8粽+4咸蛋21元:五芳斋旗下端午礼盒大促
美司法部申请保护令动议,要求阻止特朗普公开机密文件
上周纯碱期价有所下跌
从《闪电侠》到《蝙蝠侠》
货车撞上奔驰反被奔驰车主请吃饭 对方生活不易:网友点赞