Rename

如何確定 mv 移動到目錄而不是替換目錄?

  • February 22, 2022

假設我有一個目錄/hello

然後我做mv /hello /hello2

我要搬進/hello/hello2/hello嗎?還是我要/hello搬去/hello2

似乎當我做這樣的事情時,我得到的結果不一致。

mv a b如果是目錄或目錄的符號連結,則嘗試移入a。否則,它將重命名(如果在不同的文件系統上,則複製和刪除)為.b``b``a``b

要獲得將文件移動到目錄中的一致結果,您可以執行以下操作:

mv file dir/.

如果dir不存在,你會得到一個錯誤,它不會重命名filedir.

mv file dir/也可以,但如果file它本身是目錄類型並且dir它本身不存在,則不能。

另一方面,如果您想做 arename而不必擔心目標文件是否作為目錄存在,使用 GNU mv,您可以執行以下操作:

mv -T file dest

在這種情況下,如果是目錄,file則不會被移入。但是,如果兩者和都是目錄並且為空,則將被重命名為(並將原來的刪除)。如果兩者都是目錄並且非空,則會抱怨。dest``dest``file``dest``dest``file``dest``dest``dest``mv -T

同樣,如果filedest不是目錄(並且包括符號連結,包括指向目錄的符號連結),file被重命名為dest(儘管如果您沒有對 的寫入權限,則會收到提示dest),並且原始目錄dest將被刪除。目錄符號連結mv file dest的情況有所不同。dest帶有-T,file被重命名為dest, 但沒有-T,file被移動到 指向的目錄中dest

總而言之,在 之後mv -T file dest,要麼file將被重命名為,dest要麼您將收到一條錯誤消息(或提示)。如果命令成功,原始的dest,如果它之前存在,將被刪除。

引用自:https://unix.stackexchange.com/questions/61388