我试图在标题中写一个,我用一个例子解释:
树目录: (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
答案 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
,这仍然只是一个换行符。)