現在を使用して問題を解決しようとしていますfdupes
。 2つのフォルダを互いに比較し、これらのディレクトリの1つにある重複ファイルをすべて削除したいと思います。
例:
ファイルは自動的に保存されます/srv/
。重複したファイルがたくさんあります。すべてそのまま維持する必要があります。また、というディレクトリがありますが、その中にある/watchfolder/
すべてのファイルを削除したいと思います。watchfolder
/srv/
私はそれを試して、fdupes -r srv/ watchfolder/
その逆も同じでした。しかし、私のファイルはずっと混乱していますsrv/
。
答え1
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
答え2
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