我经常执行以下命令:
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命令将失败。除非"files*"
恰好扩展为两个文件,或者最后一个文件名"files*"
恰好是一个目录,否则第二个mv命令也会失败。然后,文件将被移动到该目录中。$ 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
没有被设置,那么其后的命令将不会被执行。由于shell将会展开您的文件,并且我相信列表中的最后一个文件现在将被称为$ something_that_does_not_exist,因此您将无法恢复您的文件。
列表中的所有其他文件都将被覆盖。因此您不能取回它们。
编辑:在我的smoothwall虚拟机上(这是我唯一能操作的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
如果最终匹配的是一个目录,你很可能会在那里找到你的文件。否则,你要么将第一个文件重命名为与第二个相同,要么出现了上述的另一个错误。
1) 你试图移动目录"folder":
mv folder abcde
mv files* abcde