2016-08-08 20 views
1

2つのルートフォルダAとBを指定した場合2つのフォルダ間で共通のファイルを見つける

AとBのサブフォルダ間に重複するテキストファイルを見つける方法はありますか?言い換えれば

は、私がA内の重複ファイルを検索する、またはB内いけないが、Aにし、Bにあるファイルのみ、AとB

からのファイルの交点を検討しています重複したことで

編集

私は同じ内容

+0

何 'LSを使用する方法について-1> dirX.lst'両方のディレクトリに、得られる上、' diff'ファイル? – GMichael

+0

"dulicate text files"とはどういう意味ですか?同じ名前のファイル、同じ内容のファイル、同じ名前と内容のファイル、または同じiノードへのリンクを意味しますか?あなたはA内で複製された同じ内容のファイルを気にしますか? –

+0

私は十分正確ではありませんでした。重複していました。同じ内容を意味し、同名ではありませんでした。 – Graph4Me

答えて

3

コメント欄で示したように、私は一度だけ、各ファイルのための単一のMD5チェックサムを生成する - その後、重複チェックサムを探します。このような

何か:

find DirA -name \*.txt -exec md5sum {} + > /tmp/a 
find DirB -name \*.txt -exec md5sum {} + > /tmp/b 

今両方のファイルで発生するすべてのそれらのチェックサムを見つけます。このような

awk 'FNR==NR{md5[$1];next}$1 in md5' /tmp/[ab] 

または多分:これらの線に沿って

ので

awk 'FNR==NR{s=$1;md5[s];$1="";name[s]=$0;next}$1 in md5{s=$1;$1="";print name[s] " : " $0}' /tmp/[ab] 
+0

これはまさに私が求めていたものです。ただし、uniq行は、一致するものの、空の出力を生成します。何かエラーがありますか? – Graph4Me

+0

新しいバージョンをお試しください。 –

+0

これは正しく動作します。ありがとう! – Graph4Me

3
comm -1 -2 <(ls dir1 | sort) <(ls dir2 | sort) 
f1 

ls -1 dir1 
f1 
f2 
f3 


ls -1 dir2 
f1 
f4 
f5 


comm -1 -2 <(ls dir1 | sort) <(ls dir2 | sort) 
f1 

#If not on bash,then 
bash -c 'comm -1 -2 <(ls dir1 | sort) <(ls dir2 | sort)' 

または検索を使用して持つファイルを意味します。内容の面でDUPを見つけるために

find dir1 dir2 -type f -ls | awk -F'/' 'N[$2]++ {print $NF}' 
f1 

またはフルパスの

find dir1 dir2 -type f -ls | awk '{print $NF}' | awk -F'/' 'N[$2]++' 
dir2/f1 

files1=(dir1/*) 
files2=(dir2/*) 


for item1 in ${files1[*]} 

do 
    ck1=$(cksum $item1 |awk '{print $1}') 
    for item2 in ${files2[*]} 
     do 
     ck2=$(cksum $item2 |awk '{print $1}') 

     if [ "$ck1" == "$ck2" ];then 
      echo "Duplicate entry found for $item1 and $item2" 
     fi 
    done 


done 
+0

私はbashシェルではなく、cshで作業しています。そのため、強制的にbash -cを使用します。しかし、OPがbashになったら、必要はありません。 –

+0

私は十分正確ではありませんでした。重複して私は等しい内容を意味しました。同名ではありません – Graph4Me

関連する問題