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