2005.08.28追記

10.4以降、dittoコマンドは特にオプションを指定しなくてもMacのリソースフォークを正しく扱うことができるようになりました。従って、「-rsrcFork」オプションは必要ありません。

初期設定でリソースフォークごと複製するように動作が変更されましたので、逆にリソースフォークをつけずに複製するオプションが用意されました。「-norsrc」オプションを使うと、データフォークだけを複製できるようになります。


 以前からMacOS Xのホームディレクトリ移動の頁で使っておきながら今まで紹介していなかったファイル複製コマンドのdittoを紹介します。同じファイル複製コマンドでも、cpとはちょっと違いますので、気をつけて下さい。
 はじめの実験は下記のような構成のterminaltestと、中身が空のterminaltest2を用いて行います。

 使い方は、「ditto 複製元 複製先」です。それでは、terminaltestにあるtestfolder1をterminaltest2に複製してみましょう。

[u094:~] hiro% ditto terminaltest/testfolder1 terminaltest2
[u094:~] hiro% ls -l terminaltest2
total 24
-rw-------  1 hiro  staff  245 Jul  1 12:50 test1.rtf
-rw-------  1 hiro  staff  245 Jul  1 12:50 test2.rtf
-rw-------  1 hiro  staff  245 Jul  1 12:50 test3.rtf
[u094:~] hiro% ls -l terminaltest/testfolder1
total 24
-rw-------  1 hiro  staff  245 Jul  1 12:50 test1.rtf
-rw-------  1 hiro  staff  245 Jul  1 12:50 test2.rtf
-rw-------  1 hiro  staff  245 Jul  1 12:50 test3.rtf

 cpとはちょっと結果が違いますね。違いをリストアップしてみましょう。

1.dittoではオプションの指定無しでディレクトリの内容をコピーできます(cpの場合-Rオプションが必要です)。
2.ファイルの情報が保存されます(cpの場合、普通に使うと、複製した時間が修正日となります。情報を保存するには-pオプションが必要です。dittoでは上記のように、情報が保存されています)。
3.ディレクトリの内容が複製先の中に展開されます(cpの場合、上記の例と同じようにcp -Rp terminaltest/testfolder1 terminaltest2とすると、terminaltest2中にtestfolder1が作られますが、dittoではtestfolder1の中身が直接terminaltest2に複製されています)。

 上記の例のように、普通にdittoすると、何の表示も出ずに、処理が終わるといきなり次のプロンプトが出ますが、これでは寂しいので、処理の表示をさせてみましょう。
 まずはシンプルにやってみましょう。小文字の「-v」オプションを使います。

[u094:~] hiro% ditto -v terminaltest/testfolder1 terminaltest2
Copying terminaltest/testfolder1

 これで作業中であると言う表示を出せました。こんどはもっと詳細に表示させてみましょう。大文字の「-V」オプションを使います。

[u094:~] hiro% ditto -V terminaltest/testfolder1 terminaltest2
>>> Copying terminaltest/testfolder1 
copying file ./.DS_Store ... 6148 bytes
copying file ./.FBCIndex ... 10240 bytes
copying file ./.FBCLockFolder/.FBCSemaphoreFile ... 6 bytes
copying file ./test1.rtf ... 245 bytes
copying file ./test2.rtf ... 245 bytes
copying file ./test3.rtf ... 245 bytes

 すると、このように、複製するファイル毎に細かく表示されます(中身の多いディレクトリでこれをやると興味深いことになるので、気を付けてお使い下さい)。

 さて、旧OSとの共存を考える時、cpやdittoには困った問題があります。それは、これらのコマンドでは、どうやら、リソースフォークを正しく扱えないらしい、ということです。
 実際に試してみましょう。

[u094:~] hiro% cp /Volumes/Dat+App/Applications/SimpleText terminaltest
[u094:~] hiro% ls -l terminaltest
total 24
-rwxr-xr-x  1 hiro  staff    0 Dec  7 21:53 SimpleText
-rwxr--r--  1 hiro  staff  245 Jul  1 12:50 test1.rtf
-rwxr--r--  1 hiro  staff  245 Jul  1 12:50 test11.rtf
-rwxr--r--  1 hiro  staff  245 Jul  1 12:50 test3.rtf
drwxrw-rw-  8 hiro  staff  228 Sep  2 14:29 testfolder1
[u094:~] hiro% cp -Rp /Volumes/Dat+App/Applications/SimpleText terminaltest/SimpleText2
[u094:~] hiro% ls -l terminal test
ls: terminal: No such file or directory
ls: test: No such file or directory
[u094:~] hiro% ls -l terminaltest
total 24
-rwxr-xr-x  1 hiro  staff    0 Dec  7 21:53 SimpleText
-rwxrwxrwx  1 hiro  staff    0 May 30  1997 SimpleText2
-rwxr--r--  1 hiro  staff  245 Jul  1 12:50 test1.rtf
-rwxr--r--  1 hiro  staff  245 Jul  1 12:50 test11.rtf
-rwxr--r--  1 hiro  staff  245 Jul  1 12:50 test3.rtf
drwxrw-rw-  8 hiro  staff  228 Sep  2 14:29 testfolder1
[u094:~] hiro% ditto /Volumes/Dat+App/Applications/SimpleText terminaltest/SimpleText3
[u094:~] hiro% ls -l terminaltest
total 24
-rwxr-xr-x  1 hiro  staff    0 Dec  7 21:53 SimpleText
-rwxrwxrwx  1 hiro  staff    0 May 30  1997 SimpleText2
-rwxrwxrwx  1 hiro  staff    0 May 30  1997 SimpleText3
-rwxr--r--  1 hiro  staff  245 Jul  1 12:50 test1.rtf
-rwxr--r--  1 hiro  staff  245 Jul  1 12:50 test11.rtf
-rwxr--r--  1 hiro  staff  245 Jul  1 12:50 test3.rtf
drwxrw-rw-  8 hiro  staff  228 Sep  2 14:29 testfolder1

 このように、cp、cp -Rp、dittoのいずれも正しく旧OS用アプリのSimpleTextをコピーできていません。Finder上で見ると見事な白紙アイコンです。そこで、かつてMacNNで話題になった完全バックアップオプションの出番です。 「-rsrcFork」というオプションを使います。いかにもリソースフォークを扱いそうなオプションです。これは、Terminalでman dittoしても出てきません。

[u094:~] hiro% ditto -rsrcFork /Volumes/Dat+App/Applications/SimpleText terminaltest/SimpleText4

 と唱えると、下記のようにちゃんとしたサイズでアイコンもある正常なSimpleTextになります。

 Mac OS Xのユーザーのホームディレクトリ移動で使用しているように、ファイル情報をすべて保持した状態でファイルを複製する際には必須のコマンドですね。