現在、fdupes
を使用して問題を解決しようとしています。 2つのフォルダを比較し、その後、これらのディレクトリの1つにある重複ファイルをすべて削除したいと思います。
例:
ファイルは自動的に/srv/
に保存されます—そこにはたくさんの重複があります。それらはすべて手つかずのままにしておくものとします。 /watchfolder/
というディレクトリもあり、/srv/
に存在する場合はwatchfolder
内のすべてのファイルを削除したいと思います。
fdupes -r srv/ watchfolder/
とその逆を試しました。しかし、それはsrv/
の私のファイルをいじり続けます。
重複が複数ある場合は、次のようになる可能性があります。
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
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