Linuxでのファイルの移動は比較的簡単に思えるかもしれませんが、ほとんどの場合よりも多くのオプションを利用できます。この記事では、GUIとコマンドラインでファイルを移動する方法を初心者に説明するだけでなく、内部で実際に何が起こっているかについても説明し、多くのエクスペリエンスユーザーがめったに探求していないコマンドラインオプションについて説明します。
何を移動しますか?
ファイルの移動について詳しく調べる前に、移動したときに実際に何が起こるかを詳しく調べる価値があります。 ファイルシステムオブジェクト。ファイルが作成されると、iノードに割り当てられます。 、これは、データストレージに使用されるファイルシステムの固定小数点です。 lsコマンドを使用して、iノードをファイルにマップすることができます。
$ ls --inode example.txt
7344977 example.txt
ファイルを移動するとき、実際にデータを1つのiノードから別のiノードに移動するのではなく、ファイルオブジェクトに新しい名前またはファイルパスを割り当てるだけです。実際、ファイルを移動してもファイルは変更または再作成されないため、ファイルは移動してもその権限を保持します。
ファイルとディレクトリのiノードは継承を意味することはなく、ファイルシステム自体によって決定されます。 iノードの割り当ては、ファイルがいつ作成されたかに基づいて順次割り当てられ、コンピューターの編成方法とは完全に独立しています。ディレクトリの「内部」にあるファイルのiノード番号は、その親ディレクトリよりも小さいか、大きい場合があります。例:
$ mkdir foo
$ mv example.txt foo
$ ls --inode
7476865 foo
$ ls --inode foo
7344977 example.txt
ただし、あるハードドライブから別のハードドライブにファイルを移動する場合、iノードは変更される可能性が非常に高くなります。これは、新しいデータを新しいファイルシステムに書き込む必要があるために発生します。このため、Linuxでは、ファイルの移動と名前の変更は文字通り同じ動作です。ファイルを別のディレクトリに移動する場合でも、同じディレクトリに新しい名前で移動する場合でも、両方のアクションは同じ基になるプログラムによって実行されます。
この記事では、あるディレクトリから別のディレクトリへのファイルの移動に焦点を当てています。
GUIは、バイナリデータの複雑なコレクションの上に、親しみやすく、ほとんどの人にとってなじみのある抽象化レイヤーです。これは、Linuxでファイルを移動するための最初で最も直感的な方法でもあります。一般的な意味でのデスクトップエクスペリエンスに慣れている場合は、ハードドライブ内でファイルを移動する方法をすでに知っているはずです。たとえば、GNOMEデスクトップでは、あるウィンドウから別のウィンドウにファイルをドラッグアンドドロップするときのデフォルトのアクションは、ファイルをコピーするのではなく移動することです。したがって、これはおそらくデスクトップで最も直感的なアクションの1つです。
KDE PlasmaデスクトップのDolphinファイルマネージャーは、デフォルトでユーザーにアクションのプロンプトを表示します。 シフトを押し続ける ファイルをドラッグしているときにキーを押すと、移動アクションが強制されます:
Linuxターミナル
- Linux用の上位7つのターミナルエミュレータ
- Linuxでのデータ分析のための10個のコマンドラインツール
- 今すぐダウンロード:SSHチートシート
- 高度なLinuxコマンドのチートシート
- Linuxコマンドラインチュートリアル
Linux、BSD、Illumos、Solaris、およびMacOSでファイルを移動するためのシェルコマンドは mvです。 。予測可能な構文を持つ単純なコマンド、 mv ソースファイルを指定された宛先に移動します。各宛先は、絶対ファイルパスまたは相対ファイルパスのいずれかで定義されます。前述のように、 mv はPOSIXユーザーにとって非常に一般的なコマンドであるため、追加の修飾子の多くは一般に不明であるため、この記事では、初心者でも経験者でも、いくつかの便利な修飾子を紹介します。
すべてのmvではありません ただし、コマンドは同じ人によって作成されたため、GNU mvを使用している可能性があります。 、BSD mv 、またはSun mv 、オペレーティングシステムによって異なります。コマンドオプションは実装ごとに異なります(BSD mv 長いオプションはまったくありません)ので、 mvを参照してください マニュアルページでサポートされているものを確認するか、代わりに好みのバージョンをインストールしてください(これはオープンソースの贅沢です)。
mvを使用してファイルをあるフォルダから別のフォルダに移動するには 、構文 mv を覚えておいてください 。たとえば、ファイルを example.txtに移動するには ドキュメントに ディレクトリ:
$ touch example.txt
$ mv example.txt〜/ Documents
$ ls〜/ Documents
example.txt
ファイルをフォルダアイコンにドラッグアンドドロップして移動する場合と同様に、このコマンドはドキュメントを置き換えません。 example.txtを使用 。代わりに、 mv ドキュメントを検出します はフォルダであり、 example.txtを配置します それにファイルします。
また、ファイルを移動するときにファイルの名前を変更することもできます。
$ touch example.txt
$ mv example.txt〜/ Documents / foo.txt
$ ls〜/ Documents
foo.txt
次のように、ファイルを別の場所に移動したくない場合でも、ファイルの名前を変更できるため、これは重要です。
$ touch example.txt
$ mv example.txt foo2.txt
$ ls
foo2.txt
mv コマンドは、 cpのようにファイルとディレクトリを区別しません します。同じ構文でディレクトリまたはファイルを移動できます:
$ touch file.txt
$ mkdir foo_directory
$ mv file.txt foo_directory
$ mv foo_directory〜/ Documents
同じ名前のファイルがすでに存在するディレクトリにファイルをコピーする場合、 mv コマンドは、デフォルトで、移動先のファイルを移動先のファイルに置き換えます。この動作はclobberingと呼ばれます 、そして時にはそれはまさにあなたが意図していることです。それ以外の場合はそうではありません。
一部のディストリビューションエイリアス (または自分で書くこともできます) mv mv --interactive 、確認を求めるプロンプトが表示されます。しない人もいます。どちらの方法でも、-インタラクティブを使用できます または-i mvを確実にするオプション 同じ名前の2つのファイルが競合している場合に確認を求めます:
$ mv --interactive example.txt〜/ Documents
mv:overwrite'〜/ Documents / example.txt'?
手動で介入したくない場合は、-no-clobberを使用してください または-n 代わりは。このフラグは、競合が発生した場合に移動アクションをサイレントに拒否します。この例では、 example.txtという名前のファイル 〜/ Documentsにすでに存在します 、そのため、指示どおりに現在のディレクトリから移動されません:
$ mv --no-clobber example.txt〜/ Documents
$ ls
example.txt
GNU mvを使用している場合 、安全な移動の別の手段を提供するバックアップオプションがあります。競合する宛先ファイルのバックアップを作成するには、 -bを使用します オプション:
$ mv -b example.txt〜/ Documents
$ ls〜/ Documents
example.txt example.txt〜
このフラグにより、 mv 移動アクションを完了しますが、移動先の場所にある既存のファイルも保護します。
もう1つのGNUバックアップオプションは--backup 、バックアップファイルの名前を定義する引数を取ります:
- 既存 :番号付きバックアップが宛先にすでに存在する場合は、番号付きバックアップが作成されます。それ以外の場合、シンプル スキームが使用されます。
- なし :-backup であっても、バックアップを作成しません が設定されます。このオプションは、 mvをオーバーライドするのに役立ちます バックアップオプションを設定するエイリアス。
- 番号付き :宛先ファイルに番号を追加します。
- シンプル :宛先ファイルに〜を追加します 、-ignore-backups を使用すると、日常のビューから簡単に非表示にできます。 lsのオプション 。
例:
$ mv --backup =numbered example.txt〜/ Documents
$ ls〜/ Documents
-rw-rw-r--。 1セスユーザー128Aug1 17:23 example.txt
-rw-rw-r--。 1セスユーザー128Aug1 17:20 example.txt。〜1〜
デフォルトのバックアップスキームは、環境変数VERSION_CONTROLを使用して設定できます。 〜/ .bashrcで環境変数を設定できます ファイルまたはコマンドの前に動的に:
$ VERSION_CONTROL =numbered mv --backup example.txt〜/ Documents
$ ls〜/ Documents
-rw-rw-r--。 1セスユーザー128Aug1 17:23 example.txt
-rw-rw-r--。 1セスユーザー128Aug1 17:20 example.txt。〜1〜
-rw-rw-r--。 1セスユーザー128Aug1 17:22 example.txt。〜2〜
-バックアップ オプションは引き続き-インタラクティブを尊重します または-i オプションなので、バックアップを作成する前にバックアップを作成しても、宛先ファイルを上書きするように求められます。
$ mv --backup =numbered example.txt〜/ Documents
mv:overwrite'〜/ Documents / example.txt'? y
$ ls〜/ Documents
-rw-rw-r--。 1セスユーザー128Aug1 17:24 example.txt
-rw-rw-r--。 1セスユーザー128Aug1 17:20 example.txt。〜1〜
-rw-rw-r--。 1セスユーザー128Aug1 17:22 example.txt。〜2〜
-rw-rw-r--。 1セスユーザー128Aug1 17:23 example.txt。〜3〜
-iを上書きできます -force または-f オプション。
$ mv --backup =numbered --force example.txt〜/ Documents
$ ls〜/ Documents
-rw-rw-r--。 1セスユーザー128Aug1 17:26 example.txt
-rw-rw-r--。 1セスユーザー128Aug1 17:20 example.txt。〜1〜
-rw-rw-r--。 1セスユーザー128Aug1 17:22 example.txt。〜2〜
-rw-rw-r--。 1セスユーザー128Aug1 17:24 example.txt。〜3〜
-rw-rw-r--。 1セスユーザー128Aug1 17:25 example.txt。〜4〜
-バックアップ オプションはBSDmvでは使用できません 。
複数のファイルを移動する場合は、 mv 宛先として指定された最終ディレクトリを扱います:
$ mv foo bar baz〜/ Documents
$ ls〜/ Documents
foo bar baz
最後のアイテムがディレクトリでない場合は、 mv エラーを返します:
$ mv foo bar baz
mv:ターゲット'baz'はディレクトリではありません
GNU mvの構文 かなり柔軟です。 mvを提供できない場合 宛先を最後の引数として使用するコマンドでは、-target-directoryを使用します または-t オプション:
$ mv --target-directory =〜/ Documents foo bar baz
$ ls〜/ Documents
foo bar baz
これは、 mvを作成するときに特に便利です。 find など、他のコマンドの出力からのコマンド コマンド、 xargs 、またはGNUParallel。
mtimeに基づく移動
GNU mvを使用 、移動するファイルが、置き換えられる移動先ファイルよりも新しいかどうかに基づいて、移動アクションを定義できます。このオプションは、-updateで可能です。 または-u オプションであり、BSD mvでは使用できません :
$ ls -l〜/ Documents
-rw-rw-r--。 1セスユーザー128Aug1 17:32 example.txt
$ ls -l <br/>-rw-rw-r--。 1セスユーザー128Aug1 17:42 example.txt
$ mv --update example.txt〜/ Documents
$ ls -l〜/ Documents
-rw-rw-r-- 。 1セスユーザー128Aug1 17:42 example.txt
$ ls -l </ pre>この結果は、2つのファイルの差分ではなく、ファイルの変更時間のみに基づいているため、注意して使用してください。 mvをだますのは簡単です 単なるタッチで コマンド:
$ cat example.txt
one
$ cat〜/ Documents / example.txt
one
two
$ touch example.txt
$ mv --update example.txt〜/ Documents
$ cat〜/ Documents / example.txt
one明らかに、これは利用可能な最もインテリジェントな更新機能ではありませんが、最近のデータの上書きに対する基本的な保護を提供します。
移動 mv だけでなく、データを移動する方法は他にもあります。 コマンドですが、ジョブのデフォルトプログラムとして、 mv 優れたユニバーサルオプションです。使用可能なオプションがわかったので、 mvを使用できます。 これまで以上に賢くなりました。
Linux