web-dev-qa-db-ja.com

OS XFinderのDuplicateExactlyに相当するUnixコマンド

この関数をbashで再現できるコマンドはどれですか?

Finderで[ファイル]を選択し、⇧⌥を押してコマンドを表示します(⇧⌥⌘D)。

AppleScriptでは、次のように利用できます。

tell application "Finder" to duplicate selection with exact copy

更新。出生時間を統計で確認しました。

commands comparison

3
1.61803

この記事 によると、これと通常の複製(⌘D)関数の主な違いは、ファイルの所有権が保持されることです。通常の複製機能は、ファイルのアクセス許可を保持しますが、所有権は保持しません。

この動作に最もよく相当するのはOSX上ditto コマンドです。 _Sudo ditto src dst_を使用するだけで、デフォルトですべてが保持されます。ファイルの所有権を保持する必要がある場合は、sudoが必要です。ディレクトリをコピーしていて、dstがすでに存在する場合は、新しいディレクトリ_dst/src_を作成するのではなく、mergedになることに注意してください。 Dittoは、マンページで説明されているように、cpioまたはZip形式のアーカイブを作成することもできます。

以下の回答は主に他のUNIXシステムに関連しており、OSXの一部のバージョンではリソースフォークまたは他のHFS固有の属性を保持しない場合があります。


まず、これらのコマンドはいずれも、rootとして実行した場合にのみ所有権を保持できることに注意してください(たとえば、システムに応じてSudoまたはsuを使用します。SudoコマンドはOSXに存在します。)。 rootとして実行されていない場合、これらのほとんどは可能な属性を保持しますが、ファイルはユーザーIDによって所有されます。

_cp -a_コマンドは、権限、所有権(rootの場合)、タイムスタンプ、シンボリックリンクなどを可能な限り保持します。 _-a_は多くのシステムでサポートされていますが(GNUではハードリンクを保持しますが、OSXでは保持しません)、POSIXではサポートされていません。最も近い同等のPOSIXコマンドは_cp -pPR_です-アクセス許可と所有権を保持するための関連する標準オプションはpですが、シンボリックリンクとPをコピーするにはRが必要ですディレクトリをコピーします。

Cpが処理できない可能性のあるハードリンクやその他の拡張属性を保持しながらコピーする最良の方法は、paxコマンド_pax -rwpe src dstdir_を使用することです。これでは、ソースファイルの名前を変更することはできず、宛先ディレクトリがすでに存在している必要があります。 dstdir/srcとしてコピーが作成されるため、理想的な結果を得るには、ソースファイルが存在するディレクトリからこれを実行する必要があります。

一部のシステムでは、paxが存在しない場合があります。その場合、tar:tar cf - srcfiles | (cd dstdir; [Sudo] tar xf -)を使用できます。ファイル名、ソースおよび宛先ディレクトリに関する同じアドバイスが、paxの場合と同じように適用されます。

5
Random832