6

私はよく次のようなコマンドを実行します。

mv folder $something_that_does_not_exist
mv files* $something_that_does_not_exist

その後、ファイルがなくなっていることに気付きます。「$something_that_does_not_exist」フォルダーでもそれらを見ることができません。ファイルとフォルダはどこに消えたのですか? どうすればそれらを取り戻すことができますか?

4

5 に答える 5

10

この問題を防ぐために、cporを使用するときは常にディレクトリ名の最後に / を追加する習慣がありmvます。

$ touch foo
$ mv foo bar/
mv: cannot move `foo' to `bar/foo': No such file or directory

末尾のスラッシュなしでmv、ファイルの名前変更操作を行います。ファイルの名前が変更されていることがあります。

于 2009-05-01T00:47:34.117 に答える
2

何も展開されない場合$something_that_does_not_exist(ただし、それが問題かどうかはわかりません)、最初の mv は失敗します。2 番目の mv コマンドも"files*"、ちょうど 2 つのファイルに展開しない限り、または最後のファイル名"files*"がたまたまディレクトリに展開された場合に失敗します。その後、ファイルはそのディレクトリに移動されます。

コマンドがスクリプト内にあり、変数を展開しようとしたときにスクリプトを中止したいが、変数が設定されていない場合は、疑問符修飾子を使用できます。例:

$ echo ${DISPLAY?}; echo display
:0.0
display
$ echo ${MYTEST?}; echo mytest
bash: MYTEST: parameter null or not set
$

したがって、使用する場合

mv folder ${something_that_does_not_exist?}

が設定されてsomething_that_does_not_existいない場合、次のコマンドは実行されません。

于 2009-05-01T00:52:56.943 に答える
0

1)ディレクトリ「folder」を移動しようとしました:

mv folder abcde

「abcde」が既存のディレクトリの場合、「folder」を「abcde」に移動します。「abcde」が既存のファイルの場合、コマンドは失敗します。それ以外の場合は、「フォルダー」の名前が「abcde」に変更されます。

2)いくつかのファイルを移動しようとしています:

mv files* abcde

「abcde」が既存のディレクトリの場合、「files*」を「abcde」に移動します。それ以外の場合、「files*」に一致するファイルが 1 つしかない場合は、そのファイルの名前が「abcde」に変更されます。そうしないと、コマンドは失敗します。

于 2009-05-01T01:19:49.173 に答える
0

シェルがファイルを展開し、リストの最後のファイルが $something_that_does_not_exist と呼ばれるようになるため、ファイルを元に戻すことはできません。

リスト内の他のすべてのファイルは上書きされます。したがって、それらを取り戻すことはできません。

編集: Smoothwall VM (現在、私の手元にある唯一の GNU/Linux!) では、次のようになります。

$ mkdir t1
$ mv t1 t2
$ ls
t2/
$ mv t2 t1
$ cd t1
$ touch f1 f2 f3 f4
$ mv f* ../t2
mv: target `../t2' is not a directory
于 2009-05-01T00:49:25.470 に答える
0
mv folder $something_that_does_not_exist

これはエラーになるはずです:

$ mkdir folder
$ mv folder
mv: Insufficient arguments (1)
Usage: mv [-f] [-i] f1 f2
       mv [-f] [-i] f1 ... fn d1
       mv [-f] [-i] d1 d2

他のケースは、何files*が一致したかによって異なります。

mv files* $something_that_does_not_exist

最終的な一致がディレクトリである場合、ファイルがそこにある可能性があります。そうしないと、最初のファイルの名前を 2 番目のファイルと同じ名前に変更するか、上記の別のエラーが発生します。

于 2009-05-01T01:09:52.893 に答える