| 原作者 | ケン・トンプソン、デニス・リッチー (AT&Tベル研究所) |
|---|---|
| 開発者 | さまざまなオープンソースおよび商用開発者 |
| 初回リリース | 1971年11月3日 |
| オペレーティング·システム | Unix、Unix ライク、Inferno、IBM i |
| プラットフォーム | クロスプラットフォーム |
| タイプ | 指示 |
| ライセンス | コアユーティリティ: GPLv3 |
mvは、 1 つ以上のファイルまたはディレクトリをある場所から別の場所に移動するUnixコマンドです。両方のファイル名が同じファイルシステム上にある場合は、単純にファイル名が変更されます。そうでない場合は、ファイルの内容が新しい場所にコピーされ、古いファイルは削除されます。 を使用するには、ユーザーがファイルの移動先のディレクトリに対する書き込み権限を持っている必要があります。これは、 が移動に関係する両方のディレクトリ (つまり、ソースとターゲット)の内容を変更するためです。同じファイルシステムにあるファイルに対してコマンドを使用すると、ファイルのタイムスタンプは更新されません。
mvmvmv
AT&T UNIXから派生した UNIX 実装では、cp、ln、およびmv は、ハードリンクされたバイナリを持つ単一のプログラムとして実装されています。動作はパス名から選択されますargv[0]。これは、ユニットとしてパッケージ化された密接に関連するコマンドを使用して、ユーザーが意図したアクションの特定のコースを指定できるようにする一般的な手法です。
歴史
moveディレクトリエントリを新しいディレクトリに移動するコマンドは、Multics で初めて実装されました。これは と短縮形にすることができますmv。[1]その後、このmvコマンドはバージョン 1 Unix [2]に登場し、 1987 年のX/Open Portability Guide 2 号の一部となりました。[3] GNU coreutilsmvにバンドルされている
のバージョンは、Mike Parker、David MacKenzie、Jim Meyering によって作成されました。[4]このコマンドは、一般的な GNU Unix ライクなユーティリティのネイティブWin32ポートのUnxUtilsコレクションの一部として、 Microsoft Windows用の別のパッケージとして利用できます。 [5] mvコマンドは、 IBM iオペレーティングシステムにも移植されています。[6]
競合する既存ファイル
ファイル名を既存のファイル名に移動すると、デフォルトでは既存のファイルが削除 (上書き) されます。既存のファイルは書き込み可能ではないが、書き込み可能なディレクトリ内にある場合、-f (強制) オプションが使用されない限り、mv コマンドは続行する前に確認を求めます (端末から実行する場合)。
GNU -n(長い形式: --no-clobber) フラグを使用すると、誤って上書きされることを防ぐことができます。あるいは、-u( --update) はソース ファイルよりも古い宛先ファイルのみを上書きし、-i( --interactive) は名前が競合するたびに確認を求め、-b( --backup) はターゲット ファイルの名前を変更します。
関連する曖昧さは、ファイル名が既存のディレクトリに移動されたときに発生します。デフォルトでは、mvこれはこのディレクトリ内で名前を移動しようとしているものとして処理されます。GNU mv には、-Tこの想定を無効にして代わりにディレクトリを上書きしようとするスイッチがあります。逆の場合は、-tディレクトリへの移動操作が明確になります。[4]
移動とコピーと削除
同じファイル システム内でのファイルの移動は、通常、ファイルをコピーしてから元のファイルを削除する方法とは別の方法で実装されます。名前変更システム コールをサポートしていないプラットフォームでは、新しいディレクトリに新しいリンクが追加され、元のリンクは削除されます。ファイルのデータにはアクセスされません。すべてのPOSIX準拠システムは名前変更コールを実装しています。
実際の移動 (実質的には名前の変更) は、回りくどいコピーと移動の手順よりも大幅に高速です。ファイルの i 番号 (「inode番号」の略) は変更されません。概念的に言えば、 「移動」の結果として変更されるのはカタログ情報のみであるため、移動するファイルを読み取るための権限は必要ありません。ソース ディレクトリとターゲット ディレクトリが変更されるため、つまりターゲット ディレクトリ内にエントリが作成され、ソース ディレクトリ内からエントリが消去されるため、移動を完了するには両方のディレクトリに「書き込み」権限が必要です。あるファイル システムから別のファイル システムへのファイルの移動は、完全に失敗するか、アトミックなコピーと削除のアクションとして自動的に実行される可能性があります。実際の詳細は実装によって異なります。
ある親ディレクトリから別の親ディレクトリにディレクトリを移動するには、古い親と新しい親を変更する権限に加えて、移動先のディレクトリへの書き込み権限が必要です。これは、ディレクトリ エントリ ".." (現在のディレクトリの親のエイリアスとして任意のコンテキストで使用できます) の i 番号が、名前変更の結果として変更されるためです。
オプション
mv のほとんどのバージョンは以下をサポートしています:
-i対話的に処理し、既存のファイルを上書きするファイルを移動する前に、標準エラーにプロンプトを書き込みます。標準入力からの応答が文字 'y' または 'Y' で始まる場合、移動が試行されます。(以前の -f オプションを上書きします。)-f強制的に宛先を上書きします (以前の -i オプションを上書きします)。
これらのオプションは、後にPOSIXとSUSの基礎となったX/Open移植性ガイドラインの一部です。POSIX準拠のmv実装はすべて、これらをサポートする必要があります。[7]
例
上記の例では、/mnt は、特定のファイル システムがマウントされているディレクトリ (「マウント ポイント」) を参照していることに注意してください。このようなディレクトリを/mntと命名することは一般的な慣例ですが、必ずしも必要ではありません。「ファイル システム」は、論理的に 1 つのユニットと見なされる独立したツリーと考えることができます。そのルートは、管理者が選択したディレクトリの上に「マウント」されます。そのディレクトリの以前の内容は表示されませんが、新しいボリュームがマウント解除されると「復元」されます。
参照
参考文献
- ^ Multics コマンド
- ^ – FreeBSD一般コマンドマニュアル
- ^ : ファイルを移動する – シェルおよびユーティリティ リファレンス、The Single UNIX 仕様、バージョン 4、The Open Group
- ^ ab – Linux一般コマンドマニュアル
- ^ 「いくつかの GNU ユーティリティのネイティブ Win32 ポート」unxutils.sourceforge.net。
- ^ IBM . 「IBM System i バージョン 7.2 プログラミング Qshell」(PDF) . IBM . 2020 年 9 月 5 日閲覧。
- ^ 単一 Unix 仕様#1980 年代: 動機
外部リンク
- – シェルおよびユーティリティ リファレンス、The Single UNIX 仕様、バージョン 4、The Open Group
- – インフェルノ一般コマンドマニュアル
