bash - 根据递归文件夹中的名称选择文本文件,压缩它们
问题描述
我有这样的目录结构
- B01
- B02
- B12
- B17R
- B35 ...
在每个目录中,我都有很多存档文件。我想选择文件名“2019”中包含的所有文件,压缩它们(最后删除它们)以获取这些文件
- B01_2019.zip
- B02_2019.zip
- B12_2019.zip
- B17R_2019.zip
- B35_2019.zip
在 bash 中实现它的最有效方法是什么?谢谢
解决方案
awk 是这里的一个选项:
find /parentdir -maxdepth 2 -name "*2019*" | awk -F\/ '{ print "zip /"$2"/"$3"/"$3"_2019.zip "$0" && rm "$0 }'
我们从 find 命令获取输出,然后根据 -F/ 指定的正斜杠分隔字段打印每个条目所需的命令
一旦我们验证了命令是否按要求读取(这一步非常重要!),我们可以使用 awk 的系统函数来执行命令,因此:
find /parentdir -maxdepth 2 -name "*2019*" | awk -F\/ '{ system("zip /"$2"/"$3"/"$3"_2019.zip "$0" && rm "$0) }'
推荐阅读
- ios - 如何在 SwiftUI 中实现下拉以关闭模式视图?
- angular - 在 Angular 2+ 中使用 --data-raw 发出一个简单的 http GET 请求
- java - 在 JPA-hibernate 中通过非主键进行一对多关联的任何方式
- java - 如何将此 JavaFX/Maven 部署到可执行文件?
- flutter - 如何切换到下一个 Video flutter
- javascript - 样式化 google-map-react 地图
- ios - 检测 UITextField 中的粘贴事件?
- python - 如何更改列表的起始位置?
- vim - 如何调用 Vim 内置函数?
- airflow - 任务实例未定义