実際、私は2つの異なることをしようとしています。
1つ目は、重複した項目を除いて、すべてのビデオファイル、写真、文書を旅行用ハードドライブにコピーすることでした。したがって、旅行用ハードドライブにはコピーが1つしかありません。複数レベルのフォルダ(ntfsファイルシステム)を表示できるはずです。 2つ目は、ソースファイルのコピーをソースに、コピーを旅行用ドライブに残し、ソースから重複したファイルをすべて削除しながら、これらすべてのファイルのコピーを転送することです。これは2つの異なるシステムのためであるため、2つの同様の要求が
特定のファイル形式(エンコード比較または.xyz拡張子を介して)に制限し、ファイルがハッシュされて重複がないかどうかを確認したいと思います。
私のニーズは、冗長ファイル検索機能と他のメディアへの自動転送/コピーを組み合わせることです...好ましくは1つのステップで。
そのようなツールがありますか?または、コマンドラインを使用してこれをどのように実行しますか?
答え1
fdupes
1つのアイデアはとの組み合わせを使用することですrsync
。
- 転送を検討しているすべてのファイルの準備領域を作成するために使用されます
rsync
。 - 準備領域の項目を除くすべての重複項目を削除します(のみ)。
- もう一度使用してください。ステージングの残りのファイルをターゲットに転送します
rsync
。
これには3つの場所が必要です。
- 元のファイル、ディレクトリパスは
$origdir
。 - ストレージキャッシュ、
$stagingdir
。 - target、のローカルまたはリモートパス
$destdir
。
まず、準備領域を作成します(これは、準備領域がまだ存在しない場合、または存在する場合は転送する必要がある項目のみを含むと仮定します)。
rsync --archive --verbose --link-dest="$origdir" \
--include="*.jpg" --include="*/" --exclude="*" \
"$origdir/" "$stagingdir"
.jpg
これにより、元の場所からハードリンクが作成され、名前で終わるすべてのファイルがステージング領域にコピーされます。ディレクトリ構造を作成するにはスペースのみが必要で、ファイルデータは重複しません($stagingdir
および$origdir
2つの異なるパーティションにない限り)。追加のファイル名パターンを追加するには、より多くの--include
オプション(今後これ--exclude
)。
次に、fdupes
次を実行します$stagingdir
。
fdupes --delete --recurse "$stagingdir"
削除する前にインタラクティブに確認をリクエストしてください。--noprompt
確認なしでファイルを削除するオプションもあります。fdupes
マニュアルをお読みください注意深い。$origdir
準備領域からファイルを削除しても、以下のファイルには影響しません。
次に、準備ディレクトリから空のディレクトリを削除します(これは追加の手順で、わずかにクリーンアップします)。
find "$stagingdir" -type d -empty -delete -print
これにより、ステージング領域全体を移動し、空のディレクトリがすべて削除されます。正常に削除されると、削除されたすべてのディレクトリが印刷されます。
最後に重複していない項目を転送します。
rsync --archive --verbose "$stagingdir/" "$destdir"
このプロセスは、最初のプロセスで使用されたパターンと一致するファイルの元のディレクトリ構造を保存し、重複エントリが削除されたrsync
後もそのまま残ります。fdupes