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

时间:2017-04-07 20:43:02

标签: bash shell command-line md5sum

我试图在标题中写一个,我用一个例子解释:

树目录: (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 $2 }'

我在dir0和subdir中搜索所有文件,计算MD5sum,排序,只选择等于和分成组的文件,只打印路径文件。

好的,这有效,我有这个输出:

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

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

如何以下列方式输出?(每个文件在同一行中具有相同的MD5sum,显然没有"第一,第二......组")

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

1 个答案:

答案 0 :(得分:1)

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

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

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

$1 = $1并没有真正改变$1的价值,但是Awk认为它可以拥有,这意味着它将重构$0(目前在其中有新行)来自{ {1}},$1等加入$2(默认为OFS)。

" "会导致Awk在每条记录上打印1(和$0,这仍然只是一个换行符。)