假设我有一个目录/hello
。
那我就这么做了mv /hello /hello2
。
我要搬进/hello
去吗/hello2/hello
?或者我要/hello
搬去/hello2
?
似乎当我做这样的事情时,我得到的结果不一致。
答案1
mv a b
尝试进入a
ifb
是b
目录或目录的符号链接。否则,它将重命名(或复制并删除,如果在不同的文件系统上)a
为b
.
为了获得将文件移动到目录中的一致结果,您可以执行以下操作:
mv file dir/.
如果dir
不存在,您将收到错误,并且不会重命名file
为dir
.
mv file dir/
也可以,但如果file
它本身是类型则不行目录而dir
它本身并不存在。
另一方面,如果您想要执行操作而rename
不必担心目标文件是否作为目录存在,则使用 GNU mv,您可以执行以下操作:
mv -T file dest
在这种情况下,如果是目录,file
则不会被移入。但是,如果和都是目录且为空,则将被重命名为(并将原来的删除)。如果两者都是目录并且非空,则会抱怨。dest
dest
file
dest
dest
file
dest
dest
dest
mv -T
相同,如果file
和dest
是不是目录(其中包括符号链接,包括目录的符号链接),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
是详细模式。