“mv”相当于拖放和替换?

“mv”相当于拖放和替换?

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

答案1

不与mv.

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

(没关系,这mv会以其他更小的方式破坏这一理念。例如,当将文件从一个文件系统移动到另一个文件系统时,mv实际上会cp执行 a 操作。)rm

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

cp -al source/* dest/ && rm -r source/*

-lto 标志的意思cp是“创建硬链接而不是复制”——它有效地创建一个新文件名,该文件名指向与旧文件名相同的文件数据。不过,这只适用于支持硬链接的文件系统——因此任何本机 UNIX 风格的文件系统都可以,但它不适用于 FAT。

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

答案2

我认为您无法复制您所描述的拖放行为mv,因为目标中的非空子目录不会被替换。

也许rsync?就像是rsync -a -r source/ target/?使用 运行,-v -n首先进行详细的试运行,以确保它能够满足您的要求。

答案3

mv -f /path/to/source/folder/* /destination/folder/

会将 /path/to/source/folder 中的所有内容(包括文件和目录)移动到 /destination/folder。

并会覆盖现有的文件和目录。

答案4

您可能想要更改此问题的正确答案:

https://github.com/iaindooley/pickdrop

例子:

说我有:

test/
test/index.php
test/images/
test/images/a.jpg
test/images/thing.png

我想将这些东西移至 /site

所以它看起来像:

site/
site/public/
site/public/index.php
site/public/a.jpg
site/public/thing.png

我可以去:

cd images &&
pick a.jpg thing.png
cd .. &&
pick index.php &&
cd .. &&
mkdir site &&
mkdir site/public &&
cd site/public &&
drop

这实际上是剪切和粘贴。

相关内容