shell - 使用 Shell 脚本计算目录中不同的文件名
问题描述
我有一个文件夹,其中包含大约 400 个文件,我必须做些什么来计算不同文件的数量,因为可能有多个版本的文件。例如,如果在一个文件夹中我有 8 个文件:-
V07Y_0021_YP_0100_001.PDF - 这是独一无二的
V07Y_0021_YP_0099_001.PDF - 这是独一无二的
V07Y_0021_YP_0003_001.PDF - 这是重复的 _001.PDF 是第一个版本
V07Y_0021_YP_0003_002.PDF - 这是重复的 _002.PDF 是第二个版本
V07Y_0021_YP_0109_001.PDF - 这是重复的 _002.PDF 是第一个版本
V07Y_0021_YP_0108_001.PDF - 这是独一无二的
V07Y_0021_YP_0109_002.PDF - 这是重复的 _002.PDF 是第二个版本
在上述文件中 _0109,_0100,_0099 是页码,在这些数字之后 _001,_002 是版本。此外,同一文件(页码)也可以有两个以上的版本,所以我必须实现一个逻辑,这将使我算作5 因为 2 个文件是重复的,所以它只会被计算一次。
我尝试了各种方法,例如 find directoryName -type f -printf '%f\n' | sort -u 这个剂量对我有用,因为我也必须找到一个模式。
如果有人知道逻辑请分享。提前致谢。
解决方案
find . -type f -printf '%f\n' |
# Remove the version part
sed 's!_[0-9][0-9][0-9].PDF$!!' |
# remove duplicates
sort -u
会输出:
V07Y_0021_YP_0003
V07Y_0021_YP_0099
V07Y_0021_YP_0100
V07Y_0021_YP_0108
V07Y_0021_YP_0109
推荐阅读
- reactjs - 替换状态数组后使用useEffect更新子组件的正确方法
- excel-formula - 获取单元格的格式化值以用于左右功能
- discord.js - 如何让 discord.js 机器人在不包含前缀和命令名称的情况下重复用户的消息?
- flutter - 如何在android studio中获取flutter sdk路径?
- python - 使用 Python 脚本将 CSV 文件上传到 DynamoDB
- python - python中基于单词和非单词的字符串替换
- docker - keycloak 无效参数:redirect_uri (Azure)
- reactjs - 反应实用程序函数来绑定这个关键字
- swiftui - SwiftUI 如何使用滑动禁用行删除?
- postgresql - solr 中的数据是否由 ckan 中的 postgres 支持