web-dev-qa-db-ja.com

`mv`はディレクトリを作成することができますか?

This 質問は、ディレクトリが存在しない場合にmvを使用するときにディレクトリを作成するための最良の方法を尋ねます。私の質問は、これがmvの組み込み機能ではないのはなぜですか?これが良い考えではないという根本的な理由はありますか?

3
texasflood

mvには複数の実装があることに注意してください。 Linuxで使用するmvは、OSXやSolarisなどで使用するものとまったく同じソースからのものではありません。ただし、すべて同じように動作することが望ましいです。 -これが 標準 のポイントです。 mv実装はこの目的のためのオプションを追加できると考えられますが、処理が非常に簡単であるため、非常に小さな利点がより重大な否定的な結果に追い越されるため、おそらく価値がないでしょう。実装のこのような非標準オプションを利用した記述は、標準の実装を使用する別のシステムに移植可能/常に動作することはできません。

mvPOSIXで標準化 であり、これはその動作を rename()システムコール に明示的に結び付けます。 ISO Cでは、rename()の動作はそれほど具体的ではなく、実装に多くが任されていますが、POSIXでは、「パスのコンポーネント」を示す潜在的なENOENTエラーに注意してください。 newのプレフィックスは存在しません "と明示された用語で予期される動作を説明します。後者を行うと移植性が損なわれるので、これはあいまいさよりもそのような詳細を実装に任せるよりも優れています。

設計を守るために、スクリプトのコンテキストでは、仮定だけを作成するよりも、デフォルトで無効なターゲットパスで失敗する方がおそらく良いでしょう。これは、パス自体がユーザー入力または構成に由来することが多く、タイプミスが含まれている可能性があるためです。この場合、スクリプトはその時点で失敗し、無効なパスを入力したことをユーザーに示す必要があります。もちろん、コードを書いた人が異なる動作を実装して存在しないディレクトリを作成するオプションもありますが、反対のことよりもあなたがその責任を負うことをお勧めします(mv呼び出しは、以前は存在しなかったディレクトリを作成しません)。

4
goldilocks