我有一个包含文件对的目录。不幸的是,文件的命名方案很混乱,因此很难通过文件名将这些文件对相互关联。
但是:每对文件几乎都是同时创建的。“几乎”意味着间隔不到 1 分钟。不相关的文件的时间戳至少相差几个小时。
我如何找到每个文件对?
我想进一步处理它们。因此,最好使用一种可以被 bash 脚本很好地解析/使用的输出格式。
目录列表示例:
Mar 14 08:29 AAA_2018_03_20_33.xxx
Mar 14 08:30 BBB-xxx-20_4.pdf
May 3 08:32 AAA_2018_05_10_40.xxx
May 3 08:32 BBB-xxx-10_2.pdf
May 24 08:33 AAA_2018_05_30_44.xxx
May 24 08:33 BBB-xxx-30_5.pdf
Mar 23 08:44 AAA_2018_03_30_35.xxx
Mar 23 08:44 BBB-xxx-30_1.pdf
May 18 08:48 AAA_2018_05_25_43.xxx
May 18 08:48 BBB-xxx-25_7.pdf
我按时间对它们进行了排序,以突出显示哪些文件属于同一类。文件名也经过了轻微的审查。
可能存在需要处理的错误:同一时间增量内可能存在单个文件(缺少配对)或两个以上的文件。在这些情况下,我想调用 bash 函数来处理问题(记录它、通知用户等)。
答案1
草图:对于每个 AAA* 文件:
- 获取时间戳(
stat
是你的朋友) - 计算匹配 BBB 的最小时间戳(我认为与 AAA 相同)以及 BBB 的最大 TS(AAA + 几分钟)
- 使用两个时间戳作为条件
find
:\( \! -newermt $maxts -a -newermt $mints \)
- 重命名找到的文件(或创建链接)AAA-whatever-BBB-whatever.pdf(
AAA_2018_03_20_33-BBB-xxx-20_4.pdf
),以便您以后可以从 AAA 名称获取 BBB 名称。