说我有一个目录/hello。
那我做mv /hello /hello2。
我搬进/hello去了/hello2/hello吗?还是我移动/hello到/hello2?
似乎当我做这样的事情时,我得到的结果不一致。
Sté*_*las 19
mv a b尝试a移入bifb是目录或目录的符号链接。否则,它将重命名(或复制和删除,如果在不同的文件系统上)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则不会被移入。但是,如果和都是目录并且为空,则将重命名为(并将原始删除)。如果两者都是目录且非空,则会报错。destdestfiledestdestfiledestdestdestmv -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'。