OS Xでファイルをコピーするときにタイムスタンプを保持できますか?


14

3台のMacのファイルを、それぞれのファイルを外付けハードドライブ上のデザインの単一のフォルダー階層にコピーすることで結合することに興味があります。

OSXでファイルをコピーした過去の経験では、ファイルが作成および変更されたタイムスタンプを失うことがあります。つまり、ファイルのコピーが発生する現在の瞬間に変更されます。

これが起こらないようにするにはどうすればよいですか?


タイムスタンプはいつ失われますか?
lhf

それらをどのようにコピーしますか?
ジェリー

回答:


11

私はこれを自分で実行しましたが、組み込みcpコマンドが実際にそれを処理します。

写真を収穫したい古いCFカードをたくさん見つけました。私の処理スクリプトはファイルmtimeを見て正しい場所に置くため、保存する必要があります。

manページから:

 -p    Cause cp to preserve the following attributes of each source file in the copy: modification time,
       access time, file flags, file mode, user ID, and group ID, as allowed by permissions.  Access
       Control Lists (ACLs) and Extended Attributes (EAs), including resource forks, will also be pre-
       served.

       If the user ID and group ID cannot be preserved, no error message is displayed and the exit value
       is not altered.

       If the source file has its set-user-ID bit on and the user ID cannot be preserved, the set-user-
       ID bit is not preserved in the copy's permissions.  If the source file has its set-group-ID bit
       on and the group ID cannot be preserved, the set-group-ID bit is not preserved in the copy's per-
       missions.  If the source file has both its set-user-ID and set-group-ID bits on, and either the
       user ID or group ID cannot be preserved, neither the set-user-ID nor set-group-ID bits are pre-
       served in the copy's permissions.

だから、使用してzsh私は実行できました(NO NAME私のカードのボリューム名です):

cp -rvp /Volumes/NO\ NAME/DCIM/**/*.{JPG,jpg} ~/Desktop/tmp/pics

特別な/**/*構造はZSHに固有のものだと思います。ただし、次のようなことができます

find /Volumes/WHATEVER -type d -print0 | xargs cp -vp {}/*.JPG /my/out/path

+1シンプルcp -pは簡単で、変更された時間(ファイルの3つのタイムスタンプの中で最も有用な可能性が高い)を保持し、中間アーカイブファイルの作成を必要としません。
wberry 14年

1
私の知る限り、「cp -p」は作成日を忘れて、代わりに変更日を設定します。これは非常に馬鹿げた振る舞いです。
ニコラスバルブレスコ14

1
cp -pただし、HFS +からFAT32にコピーする場合は機能しません。
-NobleUplift

9

このようなコピーを行うには、rsyncを使用します。ただし、Appleが提供するバージョンは2.6.9であり、これにバグがあることに注意してください。そのため、自分でビルドするか、パッケージマネージャーを介してサードパーティのビルドを取得する必要があります

例えば

rsync -aE source_dir target_dir

このオプション-EはACLをコピーし-a、unixの許可と時刻を保持します。(まあ、rsync 2でやったrsync 3は-AXを必要とするようだ)

rsync ドライブをマウントせずにリモートマシンにコピーするようにセットアップすることもできます。

rsyncにはaRsyncなどの GUIフロントエンドがいくつかあります。他のディレクトリ同期ツールについては、この質問を参照してください。


rsyncは良い解決策ですが、アクセス時間を保持しないことに注意してください。pax(以下の私の答えを参照)します。
jaume

1
私の知る限り、「rsync」は作成日を忘れて、代わりに修正日を設定します。これは大きな失敗です。
ニコラスバルブレスコ14

→jaume: "file a"を "file b"にコピーするコマンドは、最初に "file a"を読み取る必要があります。したがって、「ファイルa」のアクセス時間を変更する必要があります。これはコマンドレベルの機能ではなく、カーネルレベルの機能です。コマンドが、別のシステムコールを介してアクセス時間を以前の状態に戻す場合、これは単純なであるため、これは危険なトリックです。
ダン14

→ニコラス:cf. man rsyncそして検索preserve times:)⇒マークからの答えは正しいです。
ダン14

1
→Mark、@ daniel-Mac OS X 10.6.8でrsyncをテストしました。「rsync -rt」を使用したフォルダーのローカルコピーは、ファイルの作成日を忘れて、変更日で置き換えます。「rsync」のマニュアルには、オプションの「時間を保持する」と書かれていますが-t。バグは、おそらくマーベリックスとヨセミテにも存在します。
ニコラスバルブレスコ14

4

を使用しpaxます。ustarpaxと呼ばれるデフォルトの形式は、ファイルの変更とアクセス時間(ユーザーID、グループID、ファイルモードビット、SpotlightコメントやACLなどの拡張属性など)を保持します。詳細については、こちらのmanページを参照してください。pax

まず、paxすべてのMacでアーカイブを作成し、次のように外部ハードドライブにコピーします。

  1. 「アプリケーション」>「ユーティリティ」>「ターミナル」を開きます。
  2. ターミナルに入力:

    $ cd
    

    そして、そのMac上で結合するファイルが存在するフォルダーをターミナルにドラッグします。

    ここに画像の説明を入力してください

    または、完全なフォルダー名を入力できます。

    $ cd /path/to/your\ folder
    

    これにより、現在のフォルダーが「your folder」に変更されます。

  3. フォルダーをアーカイブしますpax

    $ cd ..
    $ pax -w "your folder" > yourfolder.ustar
    
  4. Finderを使用して、新しく作成したアーカイブyourfolder.ustarを外部ハードドライブにコピーします。

次に、アーカイブを抽出しますpax

  1. 外部USBハードドライブが接続されているMacでターミナルを開きます。

  2. cd上記のコマンドを使用して、現在のフォルダーを外部ハードドライブ上の単一フォルダー階層に変更します。

    $ cd /Volumes/externalHDD/path/to/single \folder
    $ ls
    yourfolder.ustar
    yourfolder2.ustar
    yourfolder3.ustar
    
  3. アーカイブを抽出します。

    $ pax -r -p e < yourfolder.ustar
    $ pax -r -p e < yourfolder2.ustar
    $ pax -r -p e < yourfolder3.ustar
    $ ls
    your folder
    your folder 2
    your folder 3
    
  4. 必要に応じて、Finderでファイルを移動します(Finderは同じボリューム内でファイルの変更とアクセス時間を保持します)。

(この手順はOS X 10.8(Mountain Lion)でテストしました。)


1
200文字より長いファイル名では機能しませんcommunity.hpe.com/t5/Ignite-UX/…–
amleszk

0

zipで圧縮するか、Ctrlキーを押しながらクリックするか、右クリックして[圧縮]を選択します。圧縮ファイルをターゲットシステムにコピーして、そこで開きます。

可能であれば、外部ドライブをFATではなくMac OSファイルシステムとしてフォーマットします。


Optionキーを押しながらクリックしないでください。Ctrlキーを押しながらクリックします。または右クリックします。
ニコラスバルブレスコ14

1
ディスクのフォーマットに最適な選択は、Mac OS Extended Journalledです。Mac OS拡張はHFS +とも呼ばれます。
ニコラスバルブレスコ14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.