“ MV”相当于拖放替换?


19

在GUI环境中,带替换的拖放操作将用要复制的内容替换文件和整个目录(包括内容)。是否可以通过'mv'命令来实现相同的直观结果?

Answers:


20

不与mv

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

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

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

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

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

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


信息丰富。非常感谢你!
user7089

4

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

也许rsync吧?像rsync -a -r source/ target/什么?首先运行,-v -n以进行详细的空运行,以确保它可以满足您的要求。


3

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

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

并将覆盖现有文件和目录。


2
只有空目录
凯文

1

您可能会想要更改以下正确答案:

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

这实际上是剪切并粘贴。


非常酷,绝对值得研究。但是,问题是关于“ MV”的,因此我认为我会留下正确的答案,因为它可以详细解释MV背后的理念。谢谢您的贡献,绝对有帮助。
user7089 2012年

同样值得注意的是,自述文件中写道:“它一点都不鲁棒-它会将您的选择存储在〜/ .pick中,直到您调用drop为止,此时它将使用〜/ .pick中的文件路径来创建新的可执行文件〜/ .drop文件将您选择的每个文件复制到当前工作目录中。”
user7089
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.