「mv file / dir」がファイルを現在の作業ディレクトリのサブディレクトリに移動しないのはなぜですか?


10

私は自分の/etcディレクトリにいて、コマンドを入力しました

me@mylaptop:/etc$ sudo mv MyFile.conf /openvpn

私はそれがファイルをopenvpnディレクトリのサブディレクトリであるディレクトリに移動すると思った/etc。しかし、それは何が起こったようではありません。確認できるのは、コマンドが実行されたことだけです。

回答:


51

この名前のディレクトリが存在しない場合、ファイルの名前をopenvpnルートディレクトリに変更しました/。これを元に戻すには、次を実行します:

sudo mv /openvpn /etc/MyFile.conf

ディレクトリが存在した場合、その中にファイルを移動した場合、復帰は次のとおりです。

sudo mv /openvpn/MyFile.conf /etc/

現在のディレクトリの既存のサブディレクトリに移動するには、これらのいずれかを実行できます。これらは相対パスを使用します。

mv MyFile.conf openvpn
mv MyFile.conf openvpn/
mv MyFile.conf ./openvpn
mv MyFile.conf ./openvpn/

.は現在のディレクトリへのリンクであるため./、パスの先頭は「このディレクトリ内」を意味します。末尾のスラッシュは、それopenvpnがディレクトリであり、その中にファイルを移動することを意味します。指定しない場合、この名前のディレクトリが存在する場合、ファイルはそこに移動されます。存在しない場合、ファイルの名前はに変更さopenvpnます。/最後にa を指定するmvと、ディレクトリが存在せず、名前を変更しない場合に警告が表示されるため、名前を変更したくない場合は安全な方法です。

あなたのパスが始まる場合/一方、それはだ、絶対にかかわらず、現在の作業ディレクトリの、それは常にルートディレクトリからの相対パスです/。ファイルと宛先の両方に絶対パスを使用すると、コマンドは次のようになります。

mv /etc/MyFile.conf /etc/openvpn
mv /etc/MyFile.conf /etc/openvpn/

参考文献


2
ディレクトリが存在したかどうかわからない場合は、sudo mv /openvpn/MyFile.conf /etc/最初にコマンドを試してください。ありそうなシナリオでは、ディレクトリが存在しなかったため、エラー(おそらく「ディレクトリではない」)が表示され、ファイルシステムには触れません。その後、あなたはちょうどすることができますsudo mv /openvpn /etc/MyFile.conf
flarn2006

9

使用する必要があります

me@mylaptop:/etc$ sudo mv MyFile.conf openvpn/

MyFile.confファイルをのopenvpnサブディレクトリに移動します/etc/

一方

me@mylaptop:/etc$ sudo mv MyFile.conf /openvpn

代わりにファイルを/ディレクトリに移動しますopenvpn(つまり、名前を変更しますopenvpn)(/openvpnディレクトリが存在しない場合)。


3
また、最初のコマンドの最後のスラッシュはオプションです。しかし、私は説明した(。または悪化し、重要なファイルを上書き)、むしろOPのような混乱の状況を作成するよりも、それがディレクトリでない場合、コマンドは失敗しますよと、それは、入るために良い習慣だと思う
flarn2006

4

ファイルを移動するとき、OSにファイルを配置するディレクトリ、またはファイルに指定する新しいパスを指定します。

OSに「/ openvpn」と伝えました。ですから、それを正確に行います-/ openvpnが存在し(ルートディレクトリにある「openvpn」というオブジェクトを意味する) 、ディレクトリであるかどうかを確認し、そうであればファイルをそこに移動するか、/ openvpnがファイルまたは存在しない場合は、ファイルの名前を変更して移動し、/ openvpnとしてアクセスできるようにします。

あなたがやりたいのは、ファイルシステムのルートディレクトリにあるディレクトリではなく、現在のディレクトリある「openvpn」ディレクトリに移動することでした(先頭の「/」が意味するものです)。したがって、絶対パス「/ openvpn」ではなく、moveコマンドでそのディレクトリをポイントする必要がありました。これらのいずれも機能します:

  • mv MyFile.conf openvpn -この「openvpn」の現在のディレクトリを確認してください
  • mv MyFile.conf /etc/openvpn -絶対パス/ etc / openvpnを探します
  • mv MyFile.conf openvpn/ -現在のディレクトリで、openvpnというディレクトリを探します
  • mv MyFile.conf ./openvpn -「現在のディレクトリ」をさらに明確にします

短いバージョン-「/」を使用して「現在のディレクトリ」を意味するため、「/ openvpn」は「現在のディレクトリにあるopenvpn」を意味する可能性があります。ただし、先頭の「/」は「ルートディレクトリ」のみを意味するため、「/ openvpn」は「ルートディレクトリのopenvpn」を意味します。必要なのは、単に「openvpn」または「openvpn /」、つまり「現在のディレクトリの openvpn」を使用することでした。


1
この答えがなぜ投票されたのか定かではありません。それは正しいです、そして私は実際にそれが最も明確だと思います!
軌道上の明るさのレース

1

で始まるパスはすべて/、相対パスではなく絶対パスです。

すべてのパスが常に現在のディレクトリからの相対パスである場合cd /etc、そもそもどうしますか?あなたはcd ../../../../../etcそれが十分なレベルであることを望み、希望する..cd ..、ルートディレクトリに到達するまでやり続けます。

または、絶対パスを表現するために他の構文が必要になります。しかし、Unix /はプロセスの現在の作業ディレクトリに関連する絶対的な意味を決定しました。だからmv MyFile.txt openvpn動作します。


いいえ、存在するかどうかにかかわらず、絶対ファイルと相対ファイルを推測することはうまくいきません。私たちは望んでいないだろうmkdir異なっから御馳走パスへのシステムコールchdirrenameシステムコールを、そして作るmvプログラムは、それはちょうど間の矛盾の余地がないmvと、出力ファイル名を取り、いくつかの他のプログラム。

mvrename()宛先がディレクトリの場合、ソースファイル名をその宛先ディレクトリに追加して再試行するため、すでに特別です。しかし、1つの単純な実装戦略は、またはでrename()失敗する最初のシステムコールに依存していることに注意してください。そのため、ファイルシステムをチェックする前に、パスが相対パスか絶対パスかを知る必要があります。EEXISTEISDIR

(初期のUnixは低速なコンピューターで実行されていました。ディレクトリが存在するかどうかの追加チェックは、キャッシュされていない場合は追加のI / Oを意味します。歴史的な効率の議論に頼ることなく、システムが機能するもっともらしい方法ではなかった。)


1

他の回答を完了するには:

mv file.txt /location

Windowsの場合と同じです

mv file.txt c:\location

Linux のファイルシステムは、ファイルシステム階層標準(略してFHS)に基づいて考えられています。ファイルの性質と内容に応じて、ファイルを配置する場所を知るのに役立ちます。

最初のフォルダー(c:Windowsに相当)は/です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.