
ditto を使用して Mac ターミナルからファイルとディレクトリをインテリジェントにコピーする
長年コマンドラインを使用しているユーザーの多くは、ファイルやディレクトリのコピーにcpコマンドを使用していますが、Mac OS Xでは「ditto」コマンドという別のソリューションを提供しています。dittoはcpコマンドよりも少し高度な機能ですが、所有権属性や権限だけでなく、ファイルのリソースフォークやファイルとフォルダのメタデータも保持するため、ファイルやフォルダが正確にコピーされることが保証されるなど、いくつかの点でcpコマンドよりも有利です。
さらに、ditto はファイルまたはフォルダをコピー元ディレクトリにコピーできますが、コピー元ディレクトリがまだ存在しない場合は、ditto が自動的に作成します。また、コピー先ディレクトリが存在する場合は、コピーされた内容がそのディレクトリにマージされます。さらに、ditto はシンボリックリンクもたどるので、ln コマンドを頻繁に使用する場合は特に便利です。
ditto コマンドをよりよく理解するために、実際の構文を使った例をいくつか見てみましょう。
Ditto を使用してファイル/フォルダをコピーする
最も単純な形式では、 ditto は cp コマンドとほぼ同じように動作し、基本的な構文は次のとおりです。
ditto source destination
たとえば、~/Desktop/FluffyBackups を /Volumes/FluffyBackups/ にコピーしたい場合は、次のように入力します。
ditto ~/Desktop/FluffyBackups /Volumes/FluffyBackups/
この場合も、コピーされたファイルのすべての所有権とリソース メタデータの詳細が保持されます。これは、あるユーザー ディレクトリから別のユーザー ディレクトリにファイルをコピーする場合や、ファイルの変更時刻などを保存する場合に特に重要になります。
ソースと宛先の内容が不明な場合は、ditto コマンドを実行する前に、comm コマンドまたは diff コマンドを使用して 2 つを比較することができます。
Ditto を使用してディレクトリとフォルダの内容を結合する
ditto はコピー先が既に存在するかどうかを確認し、存在する場合はコピー元のディレクトリをコピー先にマージします。これは重要かつ非常に便利な機能で、Mac OS X のコマンドラインからディレクトリをマージする最も簡単な方法の一つとなっています(Finder でも簡単にマージできます)。
ditto ~/Pictures/Fall2015/ /Volumes/PhotoBackup/2015/
これは「Fall2015」からすべての写真を取得し、既存のディレクトリ「2015」にコピーすることで、ソースディレクトリの内容をターゲットディレクトリに統合することを意味します。繰り返しますが、この統合はターゲットディレクトリが既に存在する場合に実行され、ターゲットディレクトリが存在しない場合は、指定された名前、またはソースディレクトリの名前で作成されます。
ditto を使用してシンボリックリンクを含むディレクトリからデータをコピーする場合、-V(verbose all)フラグを使用すると、コピーされたすべてのファイルとシンボリックリンクが表示されるため便利です。-V は -v とは異なります。-v はファイルのみを出力し、シンボリックリンクは出力しません。
Ditto を使用してメタデータなしでコピーする
何らかの理由でメタデータとリソースフォークをコピーしたくない場合は、次のように –norsrc フラグを使用できます。
ditto -V --norsrc ~/Sample/Folder /Volumes/NoMetadataBackups
–norsrc フラグを使用すると、ditto の主な利点が損なわれる可能性がありますが、場合によっては便利なことがあります。
この優れた ditto コマンドについてさらに詳しく知るには、Mac OS X で次のように入力してアクセスできるマニュアル ページを参照してください。
man ditto
通常どおり、矢印キーを使用してマニュアル ページ内を上下に移動します。
ditto に大きく依存する前に、重要でないファイルの移動やディレクトリの結合を数回試してみて、計画している使用法でどのように動作するかを理解してください。