按大小比较文件夹之间名称相似的文件

按大小比较文件夹之间名称相似的文件

我有两个文件夹,每个文件夹都有数千个文件。去年的一个文件夹,每个文件都有一个字母和年份前缀 (a2020abc123.txt),今年的相同文件位于另一个具有相同格式的文件夹中 (a2021abc123.txt)。我需要比较这两个文件夹,以找到去年和今年之间存在巨大差异的任何文件。我的团队一直在这样做用手所以我想要一种更快且不易出错的方法。

例如:

/folder1/a2021fileA123.txt 50kb
/folder2/a2022fileA123.txt 80kb
/folder1/a2021fileA124.txt 79kb
/folder2/a2022fileA124.txt 80kb
/folder1/a2021fileA125.txt 90kb
/folder2/a2022fileA125.txt 80kb

理想情况下会返回类似以下内容:

/folder1/a2021fileA123.txt 50kb
/folder2/a2022fileA123.txt 80kb
/folder1/a2021fileA125.txt 90kb
/folder2/a2022fileA125.txt 80kb
/folder1/a2021fileA124.txt 79kb
/folder2/a2022fileA124.txt 80kb

我需要将成对的文件像上面一样分组在一起,这是我在我知道如何做的基本排序中遇到的问题。我对使用 awk 等工具非常陌生,我的团队更喜欢 powershell。非常感谢。几周后我都会在梦中看到这些文件名。

答案1

有很多我不确定你想要如何处理,所以这里至少是一个起点 - 这将找到你文件夹中的文件并打印它们,并以字节大小为前缀:

find folder1 folder2 -type f -printf '%s %P\n'

例如(只需手动编辑问题中的列表):

50000 a2021fileA123.txt
80000 a2022fileA123.txt
79000 a2021fileA124.txt
80000 a2022fileA124.txt
90000 a2021fileA125.txt
80000 a2022fileA125.txt

现在将其通过管道传递给此 awk 命令,它将输出 2022 和 2021 版本文件之间的大小差异:

$ cat tst.awk
{
    size = $1
    year = substr($2,2,4)
    base = substr($2,6)
    bases[base]
    map[base,year] = size
}
END {
    for ( base in bases ) {
        print base, map[base,2022] - map[base,2021]
    }
}

$ find folder1 folder2 -type f -printf '%s %P\n' | awk -f tst.awk
fileA125.txt -10000
fileA123.txt 30000
fileA124.txt 1000

通过管道将其传递到sort以获取按大小差异排序的输出:

$ find folder1 folder2 -type f -printf '%s %P\n' | awk -f tst.awk | sort -k2,2rn
fileA123.txt 30000
fileA124.txt 1000
fileA125.txt -10000

希望有帮助。

答案2

你需要diff

#!/bin/sh
cd folder1
for f in *
do
   diff $f ../folder2/$f
done

相关内容