web-dev-qa-db-ja.com

重複ファイルを削除しますが、それらが同じフォルダーにある場合に限りますか?

FAQを読みましたが、製品の推奨を求めてこれが終了に近づいていることを知っています...

私は少なくとも40の「重複ファイル」リムーバーユーティリティ(Windows、OSX、Linux)を見てきましたが、どれも私が探している特定の機能を持っていません。

これを行うことができるものがあるかどうか、またはそれのために独自のツールを作成する必要があるかどうかを今すぐ確認する必要があります。

「はい、存在します」という答えだけで大丈夫です。
それは私が十分に検索しなかったことを意味します。

私の必要な機能:大きなフォルダー構造全体で重複ファイルを削除しますが、重複が同じフォルダーにある場合に限ります。
例えば。同一のファイルA、B、Cがあるとします。 AとCは同じフォルダにあります。 Bは別のフォルダにあります。 AまたはCのいずれかを削除する必要があります(優先なし)が、Bはそのままにしておく必要があります。

これを行うことができる何かがそこにありますか?
(Windowsが望ましいですが、OS-XまたはLinuxでも問題ありません。)

4
Tonny

-rなしでfdupesを使用できるため、サブディレクトリに移動しません。これにより、重複ファイルのリストが出力されます。

find . -type d -exec fdupes -n {} \;

-nは空のファイルを無視します。 -dN--delete --noprompt)を追加して、最初の重複ファイルを除くすべてを削除します。

brew install fdupesを使用してOSXにfdupesをインストールできます。

4
Lri

さて、私が言ったように、私はそれを行うPythonスクリプトを作成しました。

私はそれを Google Code でホストし、GPL v3としてオープンソース化したので、プログラムを改善したい人なら誰でもそれができると思います。

また、ある程度デバッグしました(Windowsで数十のファイルを作成し、元のファイルをすべて削除しました)。コードは、コードが実際に何をしているのかを誰かに知らせるために、非常にコメントされています。

Python 3.3で実行しましたが、最新のPython 2で動作するはずです。

ああ、そして最良の部分は、それはどのOSでも動作するはずですPythonサポート(Windows、OSX、Linux、...)

5

これは、OSXとLinuxの両方で実行する必要がある、低速ですが確実で非常に単純なアプローチです。 $HOMEにある重複ファイルに関心があると思いますが、必要に応じて変更できます。

アイデアは、最初にすべてのディレクトリのリストを見つけ、次にそれらの中のファイルを比較して、同一のものを削除することです。私が言ったように、これは非常に単純なので、ファイルのペアの最初のものを保持し、警告なしに残りを削除します。

これは複製を印刷しますが変更は行いませんファイルに:

find $HOME  -mindepth 1 -type d | while read dir; do 
  find $dir -type -f -exec md5sum {} \; | sort > md5sums;
  gawk '{print $1}' md5sums | sort | uniq -d > dupes;
  while read d; do 
    echo "---"; grep -w $d md5sums | cut -d ' ' -f 2-;
  done < dupes
done; rm dupes md5sum 

これは重複ファイルをサイレントに削除します。問題がないことが確実な場合にのみ実行してください

find $HOME  -mindepth 1 -type d | 
while read dir; do 
  find $dir -type -f -exec md5sum {} \; | sort > md5sums;
  gawk '{print $1}' md5sums | sort | uniq -d |
  while read d; do grep -w $d md5sums | cut -d ' ' -f 2- | tail -n +2; done |
  | xargs rm ; 
done; rm dupes md5sum 

警告:これは遅く、実際には遅いです。警告は表示されず、ファイルはサイレントに削除されます。明るい面では、それらのファイルがあなたが望むものと同じディレクトリにある場合にのみそうします。

1
terdon