如何决定 mv 移动到目录而不是替换目录?

如何决定 mv 移动到目录而不是替换目录?

假设我有一个目录/hello

那我就这么做了mv /hello /hello2

我要搬进/hello去吗/hello2/hello?或者我要/hello搬去/hello2

似乎当我做这样的事情时,我得到的结果不一致。

答案1

mv a b尝试进入aifbb目录或目录的符号链接。否则,它将重命名(或复制并删除,如果在不同的文件系统上)ab.

为了获得将文件移动到目录中的一致结果,您可以执行以下操作:

mv file dir/.

如果dir不存在,您将收到错误,并且不会重命名filedir.

mv file dir/也可以,但如果file它本身是类型则不行目录dir它本身并不存在。

另一方面,如果您想要执行操作而rename不必担心目标文件是否作为目录存在,则使用 GNU mv,您可以执行以下操作:

mv -T file dest

在这种情况下,如果是目录,file则不会被移入。但是,如果和都是目录且为空,则将被重命名为(并将原来的删除)。如果两者都是目录并且非空,则会抱怨。destdestfiledestdestfiledestdestdestmv -T

相同,如果filedest不是目录(其中包括符号链接,包括目录的符号链接),file将被重命名为dest(尽管如果您没有 的写入权限,您将收到提示dest),并且原始目录dest将被删除。与目录符号链接的mv file dest情况有所不同。dest使用-T,file重命名为dest,但不使用-T,file则移动到 指向的目录中dest

总而言之,在 之后mv -T file dest,要么file将被重命名为dest,要么您将收到错误消息(或提示)。如果命令成功,则原始的dest(如果之前存在)将被删除。

答案2

这完全取决于是否已经/hello2存在名为已经存在的目录。

如果/hello2存在并且是目录,mv则将始终移动/hello/hello2/hello.

如果/hello2不存在,则mv始终重命名/hello/hello2.

如果/hello2存在并且是一个文件,您将收到错误,cannot overwrite non-directory 'hello2' with directory 'hello'.

答案3

我尝试过这些

mkdir test1
mv -v test1 test2
output:`test1' -> `test2'
mkdir test1
mv -v test2 test1
output: `test2' -> `test1/test2'
touch test2
output:mv: cannot overwrite non-directory `test2' with directory `test1'

希望这能解释一切。-v是详细模式。

相关内容