首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >意外地将文件和文件夹移动到不存在的位置

意外地将文件和文件夹移动到不存在的位置
EN

Stack Overflow用户
提问于 2009-05-01 00:39:55
回答 5查看 15.1K关注 0票数 6

我经常执行这样的命令:

代码语言:javascript
复制
mv folder $something_that_does_not_exist
mv files* $something_that_does_not_exist

然后,我意识到我的文件不见了。我甚至在"$something_that_does_not_exist“文件夹中也看不到它们。我的文件和文件夹到哪里去了?我怎么才能把它们找回来呢?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-05-01 00:47:34

为了防止这个问题,在使用cpmv时,我有一个习惯,那就是总是在目录名的末尾附加一个/

代码语言:javascript
复制
$ touch foo
$ mv foo bar/
mv: cannot move `foo' to `bar/foo': No such file or directory

如果没有尾随的斜杠,mv将执行文件重命名操作。您可能会发现您的文件已更改名称。

票数 10
EN

Stack Overflow用户

发布于 2009-05-01 00:52:57

如果$something_that_does_not_exist扩展为空(但我不确定这是否是您的问题?)那么第一个mv将失败。第二个mv命令也将失败,除非"files*"展开到恰好两个文件,或者如果最后一个文件名"files*"展开成一个目录。然后,这些文件将被移动到该目录。

如果命令位于脚本中,并且您希望脚本在尝试展开变量时中止,并且未设置该变量,则可以使用问号修饰符。示例:

代码语言:javascript
复制
$ echo ${DISPLAY?}; echo display
:0.0
display
$ echo ${MYTEST?}; echo mytest
bash: MYTEST: parameter null or not set
$

因此,如果您使用

代码语言:javascript
复制
mv folder ${something_that_does_not_exist?}

并且未设置something_that_does_not_exist,则不会执行以下命令。

票数 2
EN

Stack Overflow用户

发布于 2009-05-01 00:49:25

您将无法找回您的文件,因为shell将展开您的文件,我相信列表中的最后一个文件现在将被命名为$something_that_does_not_exist。

列表中的所有其他文件都将被覆盖。所以你不能把它们拿回来。

编辑:在我的smoothwall VM上(现在我手中唯一的GNU/Linux!)我明白了:

代码语言:javascript
复制
$ 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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/809761

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档