我经常执行这样的命令:
mv folder $something_that_does_not_exist
mv files* $something_that_does_not_exist然后,我意识到我的文件不见了。我甚至在"$something_that_does_not_exist“文件夹中也看不到它们。我的文件和文件夹到哪里去了?我怎么才能把它们找回来呢?
发布于 2009-05-01 00:47:34
为了防止这个问题,在使用cp或mv时,我有一个习惯,那就是总是在目录名的末尾附加一个/
$ touch foo
$ mv foo bar/
mv: cannot move `foo' to `bar/foo': No such file or directory如果没有尾随的斜杠,mv将执行文件重命名操作。您可能会发现您的文件已更改名称。
发布于 2009-05-01 00:52:57
如果$something_that_does_not_exist扩展为空(但我不确定这是否是您的问题?)那么第一个mv将失败。第二个mv命令也将失败,除非"files*"展开到恰好两个文件,或者如果最后一个文件名"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-01 00:49:25
您将无法找回您的文件,因为shell将展开您的文件,我相信列表中的最后一个文件现在将被命名为$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 directoryhttps://stackoverflow.com/questions/809761
复制相似问题