碰撞時複製並重新命名

碰撞時複製並重新命名

我想用命令列合併這些資料夾的內容。

.
├── folder1
│   │ file.txt
├── folder2
│   │ file.txt
└───folder3
    │ file.txt

我怎樣才能做到這一點 ?

答案1

最後我可以用它來做到這cp一點--backup旗幟。

cp --backup=numbered */*.txt new_directory/

答案2

以下命令列循環會將目前目錄中名為「folder*」的每個資料夾的(頂級)內容複製到名為「new_directory」的目錄中。預設情況下, glob/*不匹配“點文件”;shopt -s dotglob如果您想改變這種行為,請使用。如果 new_directory 中已存在相同(基本)檔案名,則它會在目標檔案前面加上原始資料夾(和底線)作為前綴,以使其唯一。

全部在一行:

for f in folder*/*; do [ ! -e "new_directory/$(basename "$f")" ] && { cp "$f" new_directory/; continue; }; [ -e "new_directory/$(basename "$f")" ] && cp "$f" "new_directory/$(dirname "$f")_$(basename "$f")"; done

為了方便閱讀,進行了分解:

for f in folder*/*
do 
  [ ! -e "new_directory/$(basename "$f")" ] && { cp "$f" new_directory/; continue; }
  [ -e "new_directory/$(basename "$f")" ] && cp "$f" "new_directory/$(dirname "$f")_$(basename "$f")"
done

如果您打算移動文件從其原始位置,只需將 更改cpmv

相關內容