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。
的&&
意思是“如果前命令成功仅运行下面的命令”。如果您愿意,可以一次运行两个命令。