cpコマンドの-Pと--parents [プログラム]
cpコマンドに、確か、ツリーでなく単一ファイルの場合でも
ソース同様のディレクトリを作ってコピーする
という機能があったはずだ、と思って探しました。
cp そのオプション a/b/c existing_dir
とすると、 existing_dir/a/b/c が作られるというオプションです。
で、man cpすると、以下のとおり。
$ man cp
-P, --parents
コピー先のファイル名の作り方を 「コピー先ディレクトリにスラッシュ (/) とコピー元ファイルの名前を加える」 とする。 cpの最後の引き数は既に存在するディレクトリでなければならない。 たとえば、
cp --parents a/b/c existing_dir
というコマンドは `a/b/c'というファイルを `existing_dir/a/b/c' に (途中のディレクトリがない場合はそれも作って) コピーする。
GNU fileutils 4.1 18 June 2002 CP(1)
ところが、cp -P しても、この日本語のman cpにあるような動作をしてくれません。
そんなバカな!? cpコマンドのオプションに「こんなあからさまなバグ」があるという確率は1%以下でしょう。
となると、「日本語のman cpにバグがある」という確率が99%です。
$ LANG=C man cp
-P, --no-dereference
never follow symbolic links in SOURCE
--parents
use full source file name under DIRECTORY
GNU coreutils 8.5 April 2010 CP(1)
なるほど。英語のman cpによると、-Pと--parentsは「まったく別物」ですね。
manの日付から推測すると、2002年当時は-Pと--parentが同一機能だったのですが、その後のある時点から、-Pと--parentが「別機能」になった、ということのようです。
その「英断」は、ちょっと疑問ですね。
lsの「混乱したオプション」や、topの「BSD形式、sysV形式オプション」などが、どうして今の今まで残っているのか、なぜ変えられなかったのかを考えれば、すぐわかることでしょう。