SSブログ

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形式オプション」などが、どうして今の今まで残っているのか、なぜ変えられなかったのかを考えれば、すぐわかることでしょう。



共通テーマ:パソコン・インターネット

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。