Linux
mv: ‘path1/path2/filename1’ 和 ‘/home/user1/dir1/path1/path2/filename1’ 是同一個文件
使用命令後:
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
為避免查看
path2
withfind
,您可以這樣做: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
多的路徑名)。