web-dev-qa-db-ja.com

fdupes-2つのディレクトリを比較した後にファイルを削除します

現在、fdupesを使用して問題を解決しようとしています。 2つのフォルダを比較し、その後、これらのディレクトリの1つにある重複ファイルをすべて削除したいと思います。

例:

ファイルは自動的に/srv/に保存されます—そこにはたくさんの重複があります。それらはすべて手つかずのままにしておくものとします。 /watchfolder/というディレクトリもあり、/srv/に存在する場合はwatchfolder内のすべてのファイルを削除したいと思います。

fdupes -r srv/ watchfolder/とその逆を試しました。しかし、それはsrv/の私のファイルをいじり続けます。

5
Chris Terrific

Fdupesで再帰するときのフィルター

重複が複数ある場合は、次のようになる可能性があります。

srv/foo                               
srv/a/b/foo
watchfolder/foo
watchfolder/c/foo
watchfolder/d/foo

このような場合、最初に見つかった重複のみを保持する必要がある場合を除いて、重複のリストをフィルターまたはシェルスクリプトにフィードして、よりスマートなルールを適用する必要があります(たとえば、srvで最もネストの深い一致)。それがあなたが望むすべてであるならば、それから:

fdupes --recurse --delete srv/ watchfolder/

うまくいくだろう。 srv /内のすべてを保持したいなど、より複雑な状況では、次のようなフィルターを検討してください。

fdupes --recurse srv/ watchfolder/ | sed '/^srv/d; /^$/! s/.*/"&"/' | xargs rm
4
CodeGnome

fdupesは、タイムスタンプが最も早いファイルと同様に、最初のファイルを保持します。ヘルプに記載されている内容については、少し誤解を招く恐れがあります。

$ ll foo/ bar/
bar/:
total 12
-rw-rw-r--. 1 BriGuy BriGuy   2 Jul 23 16:10 a
-rw-rw-r--. 1 BriGuy BriGuy 102 Jul 23 16:22 b
-rw-rw-r--. 1 BriGuy BriGuy 610 Jul 23 16:23 c

foo/:
total 12
-rw-rw-r--. 1 BriGuy BriGuy   2 Jul 23 16:10 a
-rw-rw-r--. 1 BriGuy BriGuy 102 Jul 23 16:11 b
-rw-rw-r--. 1 BriGuy BriGuy 610 Jul 23 16:22 c

$ fdupes foo/ bar/
foo/b                                   
bar/b

foo/c
bar/c
# in above foo/b and foo/c would be kept

$ cp bar/c foo/c
$ fdupes foo/ bar/
bar/c                                   
foo/c

foo/b
bar/b
# in above foo/b and bar/c would be kept,
# as bar/c has an earlier timestamp than foo/c now
2
BriGuy