我正在改进一个列出我去年编写的重复文件的脚本(如果您点击链接,请参阅第二个脚本)。
输出的记录分隔符duplicated.log
是零字节而不是回车符\n
。例子:
$> tr '\0' '\n' < duplicated.log
12 dir1/index.htm
12 dir2/index.htm
12 dir3/index.htm
12 dir4/index.htm
12 dir5/index.htm
32 dir6/video.m4v
32 dir7/video.m4v
(在本例中,五个文件dir1/index.htm
, ... 和dir5/index.htm
相同md5sum
,大小为 12 字节。另外两个文件dir6/video.m4v
和dir7/video.m4v
相同md5sum
,内容大小 ( du
) 为 32 字节。)
由于每一行都以零字节 ( \0
) 而不是回车符号 ( \n
) 结束,因此空行表示为两个连续的零字节 ( \0\0
)。
我使用零字节作为行分隔符,因为路径文件名可能包含回车符。
但是,这样做我遇到了这个问题:
如何“grep”指定文件的所有重复项duplicated.log
?
(例如如何检索重复的dir1/index.htm
?)
我需要:
$> ./youranswer.sh "dir1/index.htm" < duplicated.log | tr '\0' '\n'
12 dir1/index.htm
12 dir2/index.htm
12 dir3/index.htm
12 dir4/index.htm
12 dir5/index.htm
$> ./youranswer.sh "dir4/index.htm" < duplicated.log | tr '\0' '\n'
12 dir1/index.htm
12 dir2/index.htm
12 dir3/index.htm
12 dir4/index.htm
12 dir5/index.htm
$> ./youranswer.sh "dir7/video.m4v" < duplicated.log | tr '\0' '\n'
32 dir6/video.m4v
32 dir7/video.m4v
我在想一些事情,比如:
awk 'BEGIN { RS="\0\0" } #input record separator is double zero byte
/filepath/ { print $0 }' duplicated.log
...但filepath
可能包含斜杠符号/
和许多其他符号(引号、回车符...)。
我可能不得不用来perl
处理这种情况......
我愿意接受任何建议、问题、其他想法……