[linux] mv: cannot move $ to $: Directory not empty


最近測試某流程時,跑的過程報錯了,於是檢查腳本修改后重新測試。腳本是改過來了,但在shell中運行某步時碰到了如題報錯!

$ mv MP_genus_network_files/ tax_network
mv: cannot move `MP_genus_network_files/' to `tax_network/MP_genus_network_files': Directory not empty

這個錯誤是這樣的:mv命令移動的東西如果在目標路徑中已存在(不為空),那么它是移動不了的,這是mv的一種保護機制,防止錯誤覆蓋。

但是這一點發生在流程中就不友好了。由於各種各樣的原因,分析人員運行到中間步驟很可能報錯,但過程文件已經生成了,如果修改腳本后再次運行的話就覆蓋不了,導致流程又一次強制報錯退出,這可不是我們想要的。怎么在自動化流程中設置這個因素呢?條件判斷的話又長又臭,而且那么多文件目錄沒法一一判斷。這里最好用rsync 來代替mv命令。

rsync -a MP_genus_network_files/ tax_network/MP_genus_network_files

注意要將該目錄文件作為目標目錄的子目錄的話,目標目錄也要加上子目錄的名稱,否則加入的只是子目錄中包含的文件。

復制后不忘了刪除原目錄文件:

rm  -rf MP_genus_network_files/

很顯然,這里用cp -r也一樣實現,那么用rsynccp備份文件到底有什么區別呢?因為這不是本篇重點,只是簡單列出:

rsync相當於從源到目的拷貝文件,而且可以設置參數,保持很多文件和文件夾的屬性。對於拷貝文件實現備份,rsync總體而言比cp要好,因為rsync只拷貝那些改動了的內容。但這也不是絕對的,比如cp -u也可以實現同樣的效果。

Ref: https://askubuntu.com/questions/269775/mv-directory-not-empty
Ref:https://www.crifan.com/linux_command_rsync_vs_cp/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM