web-dev-qa-db-ja.com

別のディレクトリで重複していないファイルを見つける方法

文書の古いバックアップがあります。現在のDocumentsディレクトリには、これらのファイルの多くがさまざまな名前の異なる場所に存在しています。バックアップにどのファイルが存在するかnotDocumentsディレクトリに存在するか、できればNiceとGUI-yを表示する方法を見つけようとしています。ドキュメントのlotを簡単に概観できます。

この質問を検索するとき、多くの人が反対の方法を探しています。 FSlintDupeGur のようなツールがありますが、重複が表示されます。反転モードはありません。

4
Redsandro

CLIを使用する準備ができている場合は、次のコマンドが機能します。

diff --brief -r backup/ documents/

これにより、各フォルダーに固有のファイルが表示されます。必要に応じて、--ignore-file-name-caseでファイル名のケースを無視することもできます

例として:

ron@ron:~/test$ ls backup/
file1  file2  file3  file4  file5
ron@ron:~/test$ ls documents/
file4  file5  file6  file7  file8
ron@ron:~/test$ diff backup/ documents/
Only in backup/: file1
Only in backup/: file2
Only in backup/: file3
Only in documents/: file6
Only in documents/: file7
Only in documents/: file8
ron@ron:~/test$ diff backup/ documents/ | grep "Only in backup"
Only in backup/: file1
Only in backup/: file2
Only in backup/: file3

さらに、ファイルが異なる場合にのみ報告する(実際の「差異」を報告しない)場合は、次のように--briefオプションを使用できます。

ron@ron:~/test$ cat backup/file5 
one
ron@ron:~/test$ cat documents/file5
ron@ron:~/test$ diff --brief backup/ documents/
Only in backup/: file1
Only in backup/: file2
Only in backup/: file3
Files backup/file5 and documents/file5 differ
Only in documents/: file6
Only in documents/: file7
Only in documents/: file8

同じことを行うことができるmeldなどの視覚的な差分ツールがいくつかあります。次の方法で、ユニバースリポジトリからmeldをインストールできます。

Sudo apt-get install meld

「ディレクトリ比較」オプションを使用します。比較するフォルダーを選択します。選択後、それらを並べて比較できます。

enter image description here

fdupesは重複ファイルを見つけるのに最適なプログラムですが、重複していないファイルはリストしません。これは探しているものです。ただし、fdupesfindの組み合わせを使用して、grep出力にないファイルをリストできます。

次の例は、backupに固有のファイルをリストします。

ron@ron:~$ tree backup/ documents/
backup/
├── crontab
├── dir1
│   └── du.txt
├── lo.txt
├── ls.txt
├── lu.txt
└── notes.txt
documents/
├── du.txt
├── lo-renamed.txt
├── ls.txt
└── lu.txt

1 directory, 10 files
ron@ron:~$ fdupes -r backup/ documents/ > dup.txt
ron@ron:~$ find backup/ -type f | grep -Fxvf dup.txt 
backup/crontab
backup/notes.txt
4
Ron

古いバックアップを異なる名前の異なるディレクトリにアーカイブされた数千のファイルとマージする最適なワークフローは、結局 DupeGuru を使用することだと考えました。 duplicatesタブ FSlint によく似ていますが、 'としてソースを追加するという非常に重要な機能があります参照」

  1. ターゲットディレクトリ(例:~/Documents)をreferenceとして追加します。
    • referenceは読み取り専用であり、ファイルは削除されません
  2. バックアップディレクトリをnormalとして追加します。
  3. 重複を見つけます。バックアップから見つかったすべての重複を削除します。
  4. バックアップディレクトリには一意のファイルのみが残っています。 FreeFileSync または Meld を使用してこれらをマージするか、手動でマージします。

古いバックアップディレクトリが複数ある場合は、最初にこのような最新のバックアップディレクトリをマージしてから、このバックアップディレクトリをreferenceとして使用して、マージする前に古いバックアップから重複を削除しますそれらをメインのドキュメントディレクトリに移動します。これにより、バックアップからマージする代わりにゴミ箱に入れたい一意のファイルを削除する必要のないlotの作業が安全になります。

プロセスで古いバックアップをすべて破棄した後、忘れずに新しいバックアップを作成してください。 :)

1
Redsandro