重複ファイルを見つけるには、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
:-) 次のことができます。
- 比較するファイル:
$filename
- 比較するファイル:
files
配列 - 比較するファイルの数
$count
(エラーの違いに注意してください)
while
ループを介してファイルを比較$filename
し、${files[$some_counter]}
各ステップですべてのファイルを並べ替えることができます。
これを改善するには、同じ内容のファイルのみを確認する必要がありますmd5sum
。これを行うには、次の操作を行います。
cut
パイプラインから削除read
md5とファイル名を読み取るように変更files
別のmd5に移動したときを検出すると、アレイをリセットして
"現在" md5および 。
重複した比較を避けることで、より良い結果が得られます。これを行うには、files
すでに配列にある同じファイルを追加しないように、ロジックを追加する必要があります。
そして変数は必要ありません$count
。
確認する必要がある場合(必要に応じて変更する必要がある)非常に重要なこと:スクリプトがスペースを含むファイル名またはディレクトリ名で機能していることを確認してください。
続きを読むバッシュ配列。