昨年書いた重複ファイルを一覧表示するスクリプトを改善しています (リンクをたどる場合は、2 番目のスクリプトを参照してください)。
出力のレコード区切り文字は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
(この例では、5 つのファイルdir1/index.htm
, ...dir5/index.htm
が同じmd5sum
で、サイズは 12 バイトです。他の 2 つのファイルdir6/video.m4v
とファイルdir7/video.m4v
は同じmd5sum
で、コンテンツのサイズ ( du
) は 32 バイトです。)
各行は\0
キャリッジ リターン記号 ( ) ではなくゼロ バイト ( )で終了するため\n
、空白行は 2 つの連続するゼロ バイト ( \0\0
) として表されます。
path-file-name には改行記号が含まれている可能性があるため、行区切りとしてゼロバイトを使用します。
しかし、私はこの問題に直面しています:指定されたファイルのすべての複製をから「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
この状況に対処するために使用する必要があるかもしれません...
提案、質問、その他のアイデアをお待ちしています...