使用 mv 命令将文件从一个文件夹移动到另一个文件夹 - 奇怪的例子

使用 mv 命令将文件从一个文件夹移动到另一个文件夹 - 奇怪的例子

我正在学习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。换句话说,当存在名为 的目录时backupsbackups/.相当于backups.


源或目标是文件或目录时的不同行为

  • 如果目录存在,这两个命令将具有相同的效果:当目标是目录时mv会将源移动到该目录。这就是预期的结果。

  • 如果目标backups是文件而不是目录:

    • 第一种情况将因错误而失败Not a directory
    • 第二种情况将重命名Caiti.bak并覆盖backups
  • 如果目标不存在:

    • 第一种情况将失败No such file or directory
    • 第二个命令会将文件重命名Caiti.bak为 file backups,导致之前的情况,并且下次发生时可能会丢失数据。

这是一个很好的做法,可以附加/.到应该存在的目录目标,并在出现错误时中止脚本。

/仅当源是附加时,所有这些情况都会工作相同文件而不是目录。

如果我们不能假设这一点,则此示例中的源是一个目录:

mv somedirectory targetnothere/

不会失败(并且某个目录将被重命名而不是被放入目标无处或中止)。额外的内容.也会使这个案例失败:

$ mv somedirectory targetnothere/.
mv: cannot move 'somedirectory' to 'targetnothere/.': No such file or directory

相关内容