当前位置: 首页 > news >正文

Bash Shell 通过ls命令筛选文件

Bash Shell 通过ls命令及其管道根据大小名称筛选文件

最近参与的项目当中有需要用pyarmor加密项目的要求,听网上吹的pyarmor都那么神,用了一下感觉也一般,试用版普通模式下文件加密居然还有大小32KB的限制,加密到一半就失败了,难绷。

失败了也不告诉别人是哪个文件大小超了,项目文件那么多,怎么好一个个去查哪个文件大于32768B?重温了一下shell,一行命令偷个懒,省得麻烦自己。

首先想到的就是ls。详解就不说了,百度一大堆,比如这个。对于我的任务而言,ls -Rlls -I即可满足。

-R # 递归处理,将指定目录下的所有文件及子目录一并处理(列出)
-l # 以长格式显示目录下的内容列表。简单而言就是更详细的信息。
-h # 以可读方式列出,如文件大小(MB,GB而非B)
-I # 忽略特定文件。如ls -I "*.py"忽略后缀为py的文件,ls -I "tests"忽略当前目录下tests文件(夹)

正好ls -Rl列出的每一行内容是由一列一列的元素组成的,可以通过awk脚本进行处理。

在这里插入图片描述
列出的内容当中,黄色框出来的是文件大小,以字节为单位,蓝色框出来的是文件(夹)名,包括后缀。我用的是KDE的桌面所以.desktop作为应用程序链接会显示其链接到的位置,这里不用管。

不懂awk脚本的可以了解下啥是三剑客:awk、grep、sed。
学习:awk基础用法 和 awk条件判断与正则 以及 awk变量解析
真是书到用时方恨少,初学linux时铁汁就都有讲过,只是都忘得差不多辣。。。Linux程序设计环境 实验1《Linux常用命令和Shell编程》

显然,我们取每一行第5列的值就可根据大小筛选文件了:

ls -Rl | awk '{if($5>32768) print$0}'

这样筛选出文件大小大于32768B的文件并输出整行内容。由于加密的只有.py文件,并且需要排除tests目录,正好文件名位于末尾,所以简单加个正则就能把.py文件筛出来了:

ls -Rl -I "tests" | awk '/^.*\.py$/' | awk '{if($5>32768) print$0}'
http://www.lryc.cn/news/11989.html

相关文章:

  • 2023-2-18 刷题情况
  • 【Linux】进程控制
  • 谷歌seo快排技术怎么做?Google排名霸屏推广原理
  • MySQL的优化
  • 实现qq群消息接收和发送功能
  • 压缩20M文件从30秒到1秒的优化过程
  • 如何选择合适的固态继电器?
  • SAP 忘记SAP系统Client 000的所有账号密码
  • Connext DDS可扩展类型Extensible Types指南
  • Docker简单使用
  • A Time Series is Worth 64 Words(PatchTST模型)论文解读
  • 微服务学习:SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • nginx平滑升级
  • 高可用的“异地多活”架构设计
  • 【面试题】Map和Set
  • Spring之事务底层源码解析
  • 【华为OD机试真题 Python】创建二叉树
  • RuoYi-Vue-Plus搭建(若依)
  • uboot和linux内核移植流程简述
  • 【CS224W】(task2)传统图机器学习和特征工程
  • 【算法基础】并查集⭐⭐⭐⭐⭐【思路巧,代码短,面试常考】
  • 人工智能轨道交通行业周刊-第34期(2023.2.13-2.19)
  • Retrofit 网络框架源码解析(二)
  • SQL Server 2008新特性——更改跟踪
  • 四六级真题长难句分析与应用
  • 华为OD机试 - 玩牌高手(Python) | 机试题算法+思路 【2023】
  • 【论文阅读】 Few-shot object detection via Feature Reweighting
  • 现代卷积神经网络经典架构图
  • 有关eclipse的使用tips
  • Mybatis(4)之CRUD