查找具有相同 md5sum 的文件并在同一行中打印相似的文件

Find the files with same md5sum and print ones alike in the same line

我正在尝试做一个写在标题中,我用一个例子来解释:

树目录: (A B C D H F G 是我的档案)

dir0/
dir0/A    //MD5sum equal MD5sum B
dir0/C
dir0/D   // MD5sum equal MD5sum F G
dir0/dir1/B  // MD5sum equal MD5sum A
dir0/dir1/H
dir0/dir1/dir2/G  //MD5sum equal MD5sum F D
dir0/dir1/dir2/F  //MD5sum equal MD5sum G D

使用此命令:

find dir0/ -type f -print0 | xargs -0 md5sum | sort | uniq -w32 --all-repeated=prepend | awk '{ print  }'

我搜索dir0和subdir中的所有文件,计算MD5sum,排序,select只有文件相等并分组,只打印路径文件。

好的,我得到了这个输出:

dir0/A        ]
dir0/dir1/B   ] first group

dir0/D             ]
dir0/dir1/dir2/F   ]
dir0/dir1/dir2/G   ] second group

怎样才能有如下的输出呢?(每个文件在同一行有相同的MD5sum,显然没有"first, second ... group")

dir0/A dir0/dir1/B  ] first group
dir0/D dir0/dir1/dir2/F dir0/dir1/dir2/G ] second group

执行此操作的最短方法是添加如下管道步骤:

awk 'BEGIN{RS=RS RS}{=}1'

RS = RS RS 导致 Awk 使用 "\n\n" 作为其记录分隔符,因此将每个块作为单个记录读取。 FS 字段分隔符是空格,其中包括换行符,因此我们无需做任何拆分行的工作。

= 并没有真正改变 </code> 的值,但 Awk 认为它可以改变,这意味着它会重建 <code>[=16=] (目前其中有换行符)来自 </code>、<code> 等,加入 OFS(默认为 " ")。

1 导致 Awk 在每条记录上打印 [=16=](和 ORS,这仍然是一个换行符)。