
私のディスクで同じですが、ファイル名が異なる重複ファイルを見つけることはできますか?
答え1
fdupes
これは可能です。からman fdupes
:
特定のパスで重複ファイルを検索します。これらのファイルは、ファイルサイズをMD5署名と比較し、バイト単位で比較することによって検索されます。
Debian または Ubuntu ではapt-get install fdupes
.Fedora/Red Hat/CentOS ではyum install fdupes
.Arch Linuxpacman -S fdupes
ではemerge fdupes
.
ファイルシステムのルートから開始してスキャンを実行するには(多くの時間とメモリがかかる場合があります)、次のものを使用してくださいfdupes -r /
。
コメントで要求されたように、次のことを行うことで最大重複数を得ることができます。
fdupes -r . | {
while IFS= read -r file; do
[[ $file ]] && du "$file"
done
} | sort -n
ファイル名に改行文字が含まれていると中断されます。
答え2
もう一つの良いツールはfslint
:
fslintは、重複ファイルや問題のあるファイル名など、ファイルシステムのさまざまな問題を見つけるためのツールセットです。
GUIに加えて、標準インストールから/usr/share/fslint/fslintディレクトリに変更するか、または$ PATHに追加してアクセスするための別々のコマンドラインツールがあります。このディレクトリの各コマンドには、その引数をより詳細に説明する --help オプションがあります。
findup - find DUPlicate files
Debian ベースのシステムでは、次のコマンドを使用してインストールできます。
sudo apt-get install fslint
サードパーティ製のツールをインストールしたくない場合やインストールできない場合は、手動でインストールすることもできます。ほとんどのそのようなプログラムがどのように機能するかは計算することです。ファイルチェックサム。同じ md5sum を持つファイルには、ほぼ確実に同じデータが含まれています。したがって、次のようにすることができます。
find / -type f -exec md5sum {} \; > md5sums
awk '{print $1}' md5sums | sort | uniq -d > dupes
while read -r d; do echo "---"; grep -- "$d" md5sums | cut -d ' ' -f 2-; done < dupes
出力例(この例では同じファイル名ですが、他の名前も機能します):
$ while read -r d; do echo "---"; grep -- "$d" md5sums | cut -d ' ' -f 2-; done < dupes
---
/usr/src/linux-headers-3.2.0-3-common/include/linux/if_bonding.h
/usr/src/linux-headers-3.2.0-4-common/include/linux/if_bonding.h
---
/usr/src/linux-headers-3.2.0-3-common/include/linux/route.h
/usr/src/linux-headers-3.2.0-4-common/include/linux/route.h
---
/usr/src/linux-headers-3.2.0-3-common/include/drm/Kbuild
/usr/src/linux-headers-3.2.0-4-common/include/drm/Kbuild
---
これは〜になりますたくさんすでに述べた専用ツールよりも遅いが動作します。
答え3
最近強化されたfdupesブランチを追加したいと思います。デュピュ、これ急いでfdupesよりも機能が豊富です(サイズフィルタなど)。
jdupes . -rS -X size-:50m > myjdups.txt
これにより、現在のディレクトリで50 MBを超える重複ファイルを繰り返し検索し、結果のリストをmyjdups.txtに出力します。
出力はサイズごとにソートされておらず、組み込まれていないようなので、これを達成するために上記の@Chris_Downの答えを調整しました。
jdupes -r . -X size-:50m | {
while IFS= read -r file; do
[[ $file ]] && du "$file"
done
} | sort -n > myjdups_sorted.txt
答え4
ハッシュ関数(ここではMD5)がドメインに競合がないと思う場合:
find $target -type f -exec md5sum '{}' + | sort | uniq --all-repeated --check-chars=32 \
| cut --characters=35-
同じファイル名をグループ化したいですか?not_uniq.sh
出力形式を指定する簡単なスクリプトを作成します。
#!/bin/bash
last_checksum=0
while read line; do
checksum=${line:0:32}
filename=${line:34}
if [ $checksum == $last_checksum ]; then
if [ ${last_filename:-0} != '0' ]; then
echo $last_filename
unset last_filename
fi
echo $filename
else
if [ ${last_filename:-0} == '0' ]; then
echo "======="
fi
last_filename=$filename
fi
last_checksum=$checksum
done
次に、find
スクリプトを使用するようにコマンドを変更します。
chmod +x not_uniq.sh
find $target -type f -exec md5sum '{}' + | sort | not_uniq.sh
これが基本的なアイデアです。find
ファイル名に特定の文字が含まれている場合は、名前を変更する必要があります。 (例:宇宙)