Files
如何使用“mv”強制覆蓋非空目錄
我想將一組文件/目錄移動(不僅僅是複制)到另一個目錄,其中一些與目標目錄中的文件/目錄有名稱衝突。我的主要目標是移動文件,所以我可以容忍非空目錄被覆蓋。
我目前正在使用
mv ... destination
,但偶爾會得到mv: 無法將 `target’ 移動到 /destination/target’: 目錄不為空
我試過
mv -f ... destination
沒有成功,因為我希望文件從原來的位置消失,rsync
這似乎不合適。作為獎勵,是否有一個很好的解決方案可以通過重命名來保留打算以某種方式覆蓋的文件?
如果您使用
mv --backup=numbered
(或
--backup
開關的其他選項之一),則將
mv
完成合併並保留打算被覆蓋的文件。
#!/bin/bash SAVEIFS=$IFS IFS=$(echo -en "\n\b") SRC=/path/to/source DST=/path/to/destination for item in $SRC/*; do if [[ -f "$DST/$(basename "$item")" ]]; then newitem=$(basename $item)_old while [[ -f "$DST/$newitem" ]]; do newitem=${newitem}_old done mv "$DST/$(basename $item)" "$DST/$newitem" fi mv "$item" "$DST/$(basename $item)" done