"file.txt"フォルダを1つのフォルダの上に移動したいが、mv file.txt ../file.txt
入力がありませんmv file.txt ../
。
これでファイルが消え、エラーメッセージは表示されません。したがって、一部の操作が正常に完了したようです。ところでここで何が起こっているのでしょうか?
バックアップがあるので、少なくとも大丈夫です。しかし、私が何をしたのか、何を変更したのか、それともファイルが魔法のように消えたのか知りたいです。
答え1
ファイルが次に移動されました。実際そのディレクトリに到達するために使用したシンボリックリンクの親ではなく、現在存在するディレクトリの親です。デフォルトでは、発生時のcd
動作はまたはls
とは異なります。上のパスをたどると効果的にシンボリックリンクを逆さまに進みますが、他のディレクトリはどのように到達したかに関係なく、自分がいるディレクトリの実際の親ディレクトリに移動します。mv
..
cd
次のディレクトリツリーを想像してください(~
はホームディレクトリ、shortcut
銀へのシンボリックリンクですmaindir/subdir
)。
~
├── maindir/
│ └── subdir/
│ └── file.txt
└── shortcut -> maindir/subdir/
簡単に言えば、表示されcd
表示されます。 ~/shortcut
ls
file.txt
pwd
~/shortcut
しかし、pwd
、の出力はそこに到達するために従ったシンボリックリンクに基づいて正確ですが、実際には(必要に応じて「物理的に」)にあり、それを知っている~/maindir/subdir
のでls
実際の親ディレクトリに移動します。期待することもできます。mv
mv file.txt ..
file.txt
~/maindir
~
スイッチを使用すると、cd
他の人のように振る舞うことができます-P
。したがって、元のコマンドmv
(~/shortcut
)を実行して実行したディレクトリにある場合は、次の場所cd -P ..
に移動します。実際親ディレクトリ(たとえば)を使用すると、単純な.dllを介して実際の現在のディレクトリにアクセス~/maindir
できます。file.txt
ls file.txt
cd -P .
答え2
mv file.txt ..
まったくmv file.txt ../file.txt
同じ効果があります。微妙な違いがありますmv
。
- 最後の引数がディレクトリ(ここ
..
)の場合は、複数のソースを入力でき、同じ名前のターゲットに移動されます。 - 最後の引数がディレクトリでない場合(ファイルまたは存在しない場合)一つソースはそこに移されました。
したがって、dirがディレクトリの場合:
mv file1 file2 file3 dir # Moves the files there
mv file dir # Moves one file
mv file dir/newname # Moves file, new name
mv file newfile # Just renames
答え3
mv file.txt ../
完全に正当な命令です。カーネルにファイル名を現在のディレクトリの親ディレクトリに移動するように指示します。 file.txt
消えずにコマンドを実行するディレクトリの親ディレクトリに表示され続ける必要があります。
状況によって状況が変わることがあります。たとえば、../file.txt
すでに存在する場合、そのコンテンツは現在のコンテンツになり、./file.txt
以前../file.txt
に含まれていたコンテンツは削除されます。