说我有一个目录/hello
。
那我做mv /hello /hello2
。
我搬进/hello
去了/hello2/hello
吗?还是我移动/hello
到/hello2
?
似乎当我做这样的事情时,我得到的结果不一致。
Sté*_*las 19
mv a b
尝试a
移入b
ifb
是目录或目录的符号链接。否则,它将重命名(或复制和删除,如果在不同的文件系统上)a
为b
.
要获得一致的结果以将文件移动到目录中,您可以执行以下操作:
mv file dir/
Run Code Online (Sandbox Code Playgroud)
或者
mv file dir/.
Run Code Online (Sandbox Code Playgroud)
如果dir
不存在,则会出现错误,并且不会重命名file
为dir
.
另一方面,如果您想执行 arename
而不必担心目标文件是否作为目录存在,则使用 GNU mv,您可以执行以下操作:
mv -T file dest
Run Code Online (Sandbox Code Playgroud)
在这种情况下,如果是目录,file
则不会被移入。但是,如果和都是目录并且为空,则将重命名为(并将原始删除)。如果两者都是目录且非空,则会报错。dest
dest
file
dest
dest
file
dest
dest
dest
mv -T
同样的,如果file
和dest
是不是目录(这包括符号链接包括链接到目录),file
将被重命名为dest
(虽然你会得到一个提示,如果你没有写权限dest
),和原来的dest
将被删除。与目录的符号链接mv file dest
的情况有所不同dest
。With -T
,file
被重命名为dest
,但没有-T
,file
被移动到 指向的目录中dest
。
总而言之, aftermv -T file dest
要么file
已重命名为 ,dest
要么您将收到错误消息(或提示)。如果命令成功,原始的dest
,如果它之前存在,将被删除。
小智 14
这完全取决于是否已经存在名为“/hello2”的目录。
如果 /hello2 存在并且是一个目录,那么 move 将始终将 /hello 移动到 /hello/hello2
如果 /hello2 不存在,那么 move 将始终将 /hello 重命名为 /hello2
如果 /hello2 存在并且是一个文件,你会得到一个错误,“不能用目录 'hello' 覆盖非目录 'hello2'。