Bash

使用 mv 時出錯

  • November 29, 2012

我在嘗試 mv 一些確實沒有意義的文件時收到錯誤消息。我收到此錯誤:

mv: cannot move `thatDir' to a subdirectory of itself, `/usr/local/apache-tomcat-6.0.32/webapps/thatDir'

執行以下命令替換 /webapps 中已存在的 thatDir 時:

From /home/myUser/war_files/ 
mv thatDir /usr/local/apache-tomcat-6.0.32/webapps

我還嘗試了所有方法:

sudo mv /home/myUser/war_files/thatDir /usr/local/apache-tomcat-6.0.32/webapps

沒有運氣。我擁有執行此操作的必要權限(加上我正在使用 sudo),但仍然沒有。我辦公室的其他人(不再在這里工作)以前也做過同樣的操作。

我試過用Google搜尋,甚至看到另一個關於 serverfault 的問題,但每個人都說與對該問題的評論相同:“也許涉及符號連結而你不知道。”

這不是問題。我嘗試使用 readlink -e 查看目錄(正如另一張票中的評論所暗示的那樣),但沒有涉及符號連結。

任何幫助,將不勝感激。

連結到與此相關的另一個問題: 無法將文件夾移動到其自身的子目錄 - 發生了什麼事?


正如我在下面的評論回復中提到的,這裡是重現此問題的步驟。如您所見,連結對此不負責任(另外,我使用的是 bash unix):

mkdir /home/myUser/testOuter    
cd /home/myUser/testOuter
mkdir test1
cd test1
mkdir moveMe
cd moveMe
touch testfile1.txt
cd ../..
mkdir test2
cd test2
mkdir moveMe
cd moveMe
touch testfile2.txt
cd ../../test1
mv moveMe ../test2

然後我得到錯誤輸出:

mv: cannot move `moveMe' to a subdirectory of itself, `../test2/moveMe'

但它顯然不在其自身的子目錄中,也沒有涉及任何連結。

如果我從中刪除文件,它會起作用,test2/moveMe/但這是不可接受的,因為我需要用 test2 覆蓋 test1 中的所有文件,保留 test1 中不存在於 test2 中的現有文件(例如使用者生成的內容),並移入任何文件來自 test1 中尚不存在的 test2。(即正常的、每天類型的移動操作)。

實際上,閱讀您正在嘗試執行的操作時,您可能遇到了這個錯誤,有人指出當您嘗試用另一個目錄覆蓋非空目錄時收到錯誤消息(這是不允許的)。

引用自:https://serverfault.com/questions/453227