質問

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

mv folder $something_that_does_not_exist
mv files* $something_that_does_not_exist

それから、ファイルがなくなったことに気付きました。フォルダー" $ something_that_does_not_exist"でもそれらを見ることができません。ファイルやフォルダはどこに行ったのですか?どうすれば元に戻すことができますか?

役に立ちましたか?

解決

この問題を防ぐために、 cp または mv を使用する場合、ディレクトリ名の末尾に常に/を追加する習慣があります。

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

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

他のヒント

$ 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 が設定されていない場合、以下のコマンドは実行されません。

シェルがファイルを展開し、リストの最後のファイルが$ 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
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番目のファイルと同じ名前に変更するか、上記の別のエラーが発生します。

1)ディレクトリ「フォルダ」を移動しようとしています:

mv folder abcde

" abcde"の場合は既存のディレクトリで、「フォルダ」を移動します; 「abcde」へ。 「abcde」の場合既存のファイルである場合、コマンドは失敗します。それ以外の場合は、「フォルダ」の名前を変更します" abcde"へ。

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

mv files* abcde

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top