我有一组 6TB 的文件,需要突出显示超过 200 万个资产的旧版本 PDF。这需要递归。我必须通过 Linux 命令行来执行此操作。
A、典型结构如下。
Folder ------ Abc_V1.pdf ------ Abc_V2.pdf ------ Abc_V3.pdf ------ 123_456_V5.pdf ------ 123_456_V6.pdf ------ 123_456_V7.pdf ------ QWERT_V1.pdf
在以上内容中,我想突出显示 ABC 和 123_456 PDF,因为它们在同一个文件夹中有多个版本。
任何只有一个版本的东西我们都可以忽略。系统上 70% 的文件夹估计只有一个版本。我不关心它们。
系统上的每个 PDF 都以下划线和版本号结尾。版本号最多可达 20。
最后一个下划线和版本号之前的所有内容都与之前的版本完全相同的文件名。
因此,查找和比较将对最后一个下划线之前的所有内容运行,如果找到多个下划线,则会突出显示。这仅适用于 PDF。
我可以以 root 身份运行该命令,操作系统是 RHEL7。这是一个有趣的问题,到目前为止我还没有太多运气。
答案1
这是第一次尝试。如果我走的路正确的话请告诉我。
find . -type f -iname '*.pdf' |perl -pe 's|^\./||; s|_[vV][0-9]+\.[pP][dD][fF]$||;' |sort |uniq --repeated
解释:
find . -type f -iname '*.pdf'
- 列出当前目录和子目录中的所有 PDF 文件|perl -pe 's|^\./||;'
- 删除./
每行开头的|perl -pe 's|_[vV][0-9]+\.[pP][dD][fF]$||;'
- 删除_v9.pdf
每行末尾的|sort
- 不言自明(find
不排序,uniq
需要排序后的输入)|uniq --repeated
- 仅显示重复的行,每行 1 条