我想用命令列合併這些資料夾的內容。
.
├── 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
如果您打算移動文件從其原始位置,只需將 更改cp
為mv
。