“MV”相当于拖放与替换?

use*_*089 20 linux command-line ubuntu

在 GUI 环境中,带有替换的拖放操作将使用复制的内容替换文件和整个目录(包括内容)。有没有办法使用“mv”命令来完成相同的直观结果?

Jan*_*der 20

不与 mv

mv(尽管它的名字)的核心功能是重命名一个对象。UNIX 做出的保证之一是重命名是原子的——您永远不会看到部分完成的重命名。如果您想更改/etc/passwd其他程序可能正在查看的文件(例如 ),并且您希望他们看到该文件的旧版本或新版本,而没有其他可能性,则此保证非常有用。但是像您描述的“递归重命名”会破坏这个保证——你可以在中间停止它,你会有一个半移动的树,可能是一团糟——所以它并不真正符合哲学的mv。这是我的猜测为什么mv -r不存在的。

(别说mv休息,在其他较小的方式理念。例如,mv实际上做了cp之后rm在将文件从一个文件系统移动到另一个文件系统时。)

够哲学了。如果你想在同一个文件系统上递归地将一棵树从一个地方移动(“拖放”)到另一个地方,你可以获得mv如下的效率和速度(例如):

cp -al source/* dest/ && rm -r source/*
Run Code Online (Sandbox Code Playgroud)

-l标志cp的意思是“创建硬链接,而不是复制” -它有效地创建一个新的文件名,它指向同一个文件的数据作为旧文件名。不过,这只适用于支持硬链接的文件系统——所以任何原生的 UNIX 文件系统都可以,但它不适用于 FAT。

&&意思是“如果前命令成功仅运行下面的命令”。如果您愿意,可以一次运行两个命令。