我的所有.c
源文件和一个Readme
文件都位于assignment2
名为 的目录中的子目录中Assignment2
。最初,来自assignment2
目录:
$ ls
corrupt.c decode.c encode.c fix.c Readme
然后我尝试将这些文件从assignment2
目录移动到父目录Assignment2
。我输入:
$ mv endocode.c Assignment2
$ ls
Assignment2 corrupt.c decode.c fix.c Readme
$ mv decode.c Assignment2
$ ls
Assignment2 corrupt.c fix.c Readme
$ mv corrupt.c Assignment2
$ ls
Assignment2 fix.c Readme
$ mv fix.c Assignment2
$ mv Readme Assignment2
$ ls
Assignment2
现在我最初调用的文件Readme
被调用Assignment2
,并且我找不到我的.c
源文件。
我的文件去哪儿了?
答案1
正如其他人所说,不幸的是,它们已经消失了。该mv
命令用预期的目的地重写了源。
正如 Jim 所说,记得在命令末尾添加/
,如果目标不是目录,命令将失败。
/
但是,这仍然不是万无一失的,因为它依赖于您记得在命令末尾添加。
您可以通过创建别名来防止这种情况再次发生。
mv
为命令创建别名
使用此解决方案,您将利用命令的
-b
或--backup
参数mv
。alias mv=mv -b
将创建目标文件的备份。因此,对于您来说,您将拥有一堆备份 Assignment2 文件。alias mv=mv --backup=numbered
这类似于上面的命令,但可以让您更好地控制备份的命名方式。老实说,我从来没有这样使用过,所以我不知道输出会是什么。对于 MAC 用户,
-b
macOS 不支持该标志。我不知道原因。如果你想保护自己,你必须使用该-n
标志。这会告诉命令不要覆盖任何现有文件。alias mv=mv -n
附加功能:还有其他更高级的选项如何撤消 MV 或 RM 命令?除了解释过的标志之外,我从未使用过这里列出的任何方法-b
。我将尝试通读它们,测试它们,如果它们正常工作,稍后将它们添加到答案中。