Linux

mv: ‘path1/path2/filename1’ 和 ‘/home/user1/dir1/path1/path2/filename1’ 是同一個文件

  • January 24, 2019

使用命令後:

find path1/ -iname 'file*[1234]' -exec mv -t /home/user1/dir1/path1/path2 {} \;

我得到一個錯誤,這些文件是相同的。命令成功完成。搜尋開始的父目錄是path1/,然後作為目標目錄,我將整個絕對路徑放在我想要移動文件的位置。為什麼會這樣?

意思mv是移動特定文件是沒有意義的,因為將其移動到目的地會將其寫回自身。

如果你嘗試,你會得到同樣的東西

mv file file

對於任何名為file.

至於為什麼會這樣:

find在路徑上執行path1。我假設這path1與絕對路徑中的相同/home/user1/dir1/path1/path2

如果您有/home/user1/dir1/path1/path2名稱與您使用的模式匹配的文件(這些文件可能已通過您的find命令的較早呼叫移動到那裡,或者甚至由於目錄遍歷的順序而 移動到那裡),那麼這些將被找到(因為是 的子目錄)。這將提示嘗試執行將文件從. 這就是觸發消息的原因(我不願稱其為實際的“錯誤”)。find``find``find``path2``path1``find``mv``path2``path2

避免查看path2with find,您可以這樣做:

find path1 \( -type d -path 'path1/path2' -prune \) -o -iname 'file*[1234]' -exec mv -t /home/user1/dir1/path1/path2 {} +

如果找到的東西是目錄 ( -type d) 並且是路徑名path1/path2,則從find遍歷目錄時建構的目錄搜尋樹中修剪它。否則,像以前一樣繼續(幾乎,我將 final 更改為一次\;獲取+盡可能mv多的路徑名)。

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