Linux 上的 mv 多个文件与 Mac 上的 mv 多个文件

Linux 上的 mv 多个文件与 Mac 上的 mv 多个文件

要在 Linux 上移动多个文件,可以使用:

mv -t DESTINATION file1 file2

而在 macOS 上则是

mv file1 file2 DESTINATION

为什么会有这样的差异呢?这是 Bash 与 Zsh 的问题,还是旧语法与新语法的问题,还是什么?

答案1

第一个示例mv使用GNU 扩展 -t( --target-directory),并且有特殊理由

你的第二个例子是标准POSIX解决方案,并将适用于每个平台产品mv(包括那些使用 GNU 实现的系统mv)。

如果您使用的是第二个版本并且想要保证目标是已经存在的目录,请在其后缀为/.要么mv完全成功,要么因错误而失败。 (如果没有尾随/,如果目标不存在或不是目录,则将mv仅充当重命名。)

答案2

不,这与 shell(bash 与 zsh)无关,它只是mv. Linux 机器很可能有GNUmv因为 Linux 机器往往是使用 GNU 实用程序构建的。另一方面,MacOS 附带BSD相反,公用事业。这意味着许多常见的命令行实用程序的行为有所不同,因为它们是设计用于执行相同操作但具有不同调整的不同实现。

因此,不是较旧的与较新的,只是设计用于执行相同操作的工具,但由做出不同设计选择的不同人编写。这与汽车的想法是一样的:所有汽车都有一种转向、刹车、加速等方式。然而,不同的汽车制造商会添加不同的东西(空调、收音机、加热座椅或其他东西),这些东西的设计方式也不同。它们仍然都是汽车,就像 GNU 和 BSDmv仍然是mv汽车一样,但除了基本功能之外,它们还有自己的怪癖和特性。


请注意,该标准mv file1 file2 dir/适用于 Linuxmv和 Mac。如果您不确定正在使用什么实现,只需使用语法mv file1 file2 dir/,它将适用于任何mv.

相关内容