我正在学习unix命令UNIX 初学者教程,位于 surrey.ac.uk在那里我发现了一种奇怪的移动文件的方法。特别是,我的主目录中有 unixstuff 文件夹,unixstuff 中有文件夹 backups 以及文件 Caiti.txt 和 Caiti.bak。
根据上面的链接,要将 Caiti.bak 文件从 unixstuff 移动到备份,我必须确保当前目录是 unixstuff 并且必须运行以下命令:
mv Caiti.bak backups/.
请您解释一下这些字符的含义/.
好吗?点表示当前目录(在本例中为 unixstuff)。如果我运行命令:
mv Caiti.bak backups
无论如何它都有效。
答案1
长话短说
这会强制目标为已存在的目录,否则命令将失败而不会产生任何效果,并用作故障保护。
的含义.
典型的 Unix/类 Unix 文件系统中的每个目录都包含两个特殊目录:一个引用它所在的目录:.
另一个引用它所在的父目录:(..
允许在目录层次结构中向后移动)。它们与它们被发现的地方有关。所以目录.
内有一个名为backups
引用的目录backups
。换句话说,当存在名为 的目录时backups
,backups/.
相当于backups
.
源或目标是文件或目录时的不同行为
如果目录存在,这两个命令将具有相同的效果:当目标是目录时
mv
会将源移动到该目录。这就是预期的结果。如果目标
backups
是文件而不是目录:- 第一种情况将因错误而失败
Not a directory
- 第二种情况将重命名
Caiti.bak
并覆盖backups
- 第一种情况将因错误而失败
如果目标不存在:
- 第一种情况将失败
No such file or directory
- 第二个命令会将文件重命名
Caiti.bak
为 filebackups
,导致之前的情况,并且下次发生时可能会丢失数据。
- 第一种情况将失败
这是一个很好的做法,可以附加/.
到应该存在的目录目标,并在出现错误时中止脚本。
/
仅当源是附加时,所有这些情况都会工作相同文件而不是目录。
如果我们不能假设这一点,则此示例中的源是一个目录:
mv somedirectory targetnothere/
不会失败(并且某个目录将被重命名而不是被放入目标无处或中止)。额外的内容.
也会使这个案例失败:
$ mv somedirectory targetnothere/.
mv: cannot move 'somedirectory' to 'targetnothere/.': No such file or directory