重複ファイルの検索

重複ファイルの検索

重複ファイルを見つけるには、bashスクリプトを作成する必要がありますが、それ以降は最終確認にmd5sum使用する必要があります。cmpシェルで次のコマンドを試しました。ループを追加してbashスクリプトに入れるにはどうすればよいですか?

find . -type f | xargs -I%  md5sum % | sort | uniq -w32 -D| cut  -f3 -d' ' 

答え1

宿題と言ったので解決策ではなくヒントをお知らせします。

次のように起動できます。

find . -type f|xargs -I%  md5sum % |sort \
 |uniq -w32 -D|cut -f3 -d' '|while read filename ; do

   # code here

done

このwhileループの内側には、filenameパイプラインによって検出されたファイルの1つの名前が含まれています。

アイデアは、各ファイルを古いファイルと比較することです。これを行うには、ループの末尾で現在のファイルを配列に追加します。

count=0
find . -type f|xargs -I%  md5sum % |sort \
 |uniq -w32 -D|cut -f3 -d' '|while read filename ; do

 # code here

 files[$cout]="$filename"
 count=$((count+1))
done

今やるべきことはコンテンツを書くだけです#code here:-) 次のことができます。

  1. 比較するファイル:$filename
  2. 比較するファイル:files配列
  3. 比較するファイルの数$count(エラーの違いに注意してください)

whileループを介してファイルを比較$filenameし、${files[$some_counter]}各ステップですべてのファイルを並べ替えることができます。


これを改善するには、同じ内容のファイルのみを確認する必要がありますmd5sum。これを行うには、次の操作を行います。

  1. cutパイプラインから削除
  2. readmd5とファイル名を読み取るように変更
  3. files別のmd5に移動したときを検出すると、アレイをリセットして

"現在" md5および 。


重複した比較を避けることで、より良い結果が得られます。これを行うには、filesすでに配列にある同じファイルを追加しないように、ロジックを追加する必要があります。

そして変数は必要ありません$count

確認する必要がある場合(必要に応じて変更する必要がある)非常に重要なこと:スクリプトがスペースを含むファイル名またはディレクトリ名で機能していることを確認してください。


続きを読むバッシュ配列

関連情報