「mv *」と入力するとどうなりますか?エラーは表示されず、現在は1つのフォルダーのみが残っています。どうして?


12

実行されたコマンドは、14 GBのデータを含むフォルダー内の「mv space *」でした。

mv *

du -hs 

同じので、14 GBのデータはどこに行ったのですか?私が何をした?


さらに情報が必要です。どのプラットフォーム?
ジャームンド14

4
@Jarmund言及された両方のコマンドがUnixライクなシステムで一般的なコマンドであることを考えると、* nixを想定するのは安全だと思います。この点で、ほとんどのシェルは同じように動作すると言っても安全だと思います。そのため、正確なプラットフォームが明示的に指定されていなくても、有用な答えを出すのに十分な推論ができます。
CVn 14


言及する別の落とし穴。信頼できないデータに対しては決して実行しmvたりcp、「」を使用したりしないでください。これは、「」が展開され、「-verbose」などの名前のファイルがコマンドライン引数を取得するためです。代わりに使用するもの:cp ./* anotherFolder
VasyaNovikov

回答:


30

私の推測では、bashはワイルドカードを展開し、すべてのフォルダーを最後のフォルダーに移動します。

例えば:

$ ls
test1  test2  test3  test4

$ mv *

$ ls
test4

$ ls test4
test1  test2  test3

ここでmv *mv test1 test2 test3 test4mv [OPTION]... SOURCE... DIRECTORYフォーマットに対応するように展開されています。したがって、すべてのフォルダーは最後のフォルダーに移動されます。


9
この。ところで、(または)で使用*したい場合は、スイッチを見てください。これにより、このようなことを少しも避けられます。mvcp--target-directory
CVn 14

2

@ssssteffffで説明されているようmv *に、シェルは現在のディレクトリ内のファイルからワイルドカード展開を行っています。ただし、mvコマンドの動作は、*展開される引数の数に依存します。3つ以上の引数がある場合、最後の引数はディレクトリでなければなりません。

   mv [OPTION]... SOURCE... DIRECTORY

そう、

5つのファイルを作成しました

$ touch 1 2 3 4 5
$ ls
1  2  3  4  5
$ mv *
mv: target ‘5’ is not a directory
$ ls
1  2  3  4  5

ここで、ワイルドカード展開の最後のパラメータとして来るディレクトリを作成すると、

$ mkdir 6
$ mv *
$ ls
6
$ ls 6
1  2  3  4  5

最後の引数が何であったかを再確認する必要があります。

  • 最後の引数がディレクトリの場合、データはおそらく安全です。
  • 引数の総数が2で、最後の引数がディレクトリである場合、データもおそらく安全です。
  • 引数の総数が2で、最後の引数がファイルである場合、2番目のファイルは確実に削除されます。

このようなエラーが表示されなかったと確信していますか?

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