Linux
如何執行相當於 yes | 的 mvcp -rf 在目錄上?
以下面的目錄樹為例,將內容移動
directory/folderA
到directory
.如果目標中存在同名文件,如何覆蓋文件,例如:
directory/folderA/2017/06/info.log
和directory/2017/06/info.log
.directory |-- folderA | |-- 2017 | | |-- 06 | | | |-- 2016 | | |-- 12 | | |-- 11 | | |-- 10 | |-- 2017 | |-- 04 | |-- 05 | |-- 06 | |-- 2016 | |
cp -l
您可以使用(--link
,硬連結文件而不是複制)來實現這一點:cp -rfl folderA . rm -rf folderA
mv
只是移動即重命名目錄為您的directory
. 對於在同一文件系統中移動文件mv
使用rename()
系統呼叫。如果源和目標位於不同的文件系統上,mv
將使用cp
和rm
完成移動,但仍首先刪除目標,複製硬連結文件 (-R
) 但不遵循符號連結 (-P
):rm -f destination_path && \ cp -pRP source_file destination && \ rm -rf source_file
雖然您無法更改 的這種行為
mv
,但該cp
命令本身更加靈活,您確實應該使用它。使用cp
,-f
導致在目標內部刪除和創建單個文件,而不是首先刪除整個目標。也受到限制,
cp
因為它只能覆蓋 (-f
)、保存器 (-n
) 或詢問 (-i
)。如果您需要在決定保留哪個文件之前比較文件,則需要rsync
.如果您仍然需要使用
rename()
系統呼叫但要實現根據需要合併目錄的目標,則需要編寫一個腳本來rename()
為單個文件呼叫單個 s。