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

use*_*951 22 rename

说我有一个目录/hello

那我做mv /hello /hello2

我搬进/hello去了/hello2/hello吗?还是我移动/hello/hello2

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

Sté*_*las 19

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

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

mv file dir/
Run Code Online (Sandbox Code Playgroud)

或者

mv file dir/.
Run Code Online (Sandbox Code Playgroud)

如果dir不存在,则会出现错误,并且不会重命名filedir.

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

mv -T file dest
Run Code Online (Sandbox Code Playgroud)

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

同样的,如果filedest不是目录(这包括符号链接包括链接到目录),file将被重命名为dest(虽然你会得到一个提示,如果你没有写权限dest),和原来的dest将被删除。与目录的符号链接mv file dest的情况有所不同dest。With -T,file被重命名为dest,但没有-Tfile被移动到 指向的目录中dest

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


小智 14

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

如果 /hello2 存在并且是一个目录,那么 move 将始终将 /hello 移动到 /hello/hello2

如果 /hello2 不存在,那么 move 将始终将 /hello 重命名为 /hello2

如果 /hello2 存在并且是一个文件,你会得到一个错误,“不能用目录 'hello' 覆盖非目录 'hello2'。