[英]merge two folders and keeping the files have same name
我有多個源文件夾(這些文件夾中有很多名為 ip 地址的文件,例如Ex: 192.168.2.1
),我想將它們合並到一個目標文件夾中。
使用終端在Linux上執行此操作的方法是什么。
來源 1
/Desktop/source1/192.168.2.1
/Desktop/source1/192.168.2.2
/Desktop/source1/192.168.2.3
來源 2
/Desktop/source2/192.168.2.1
/Desktop/source2/192.168.2.2
/Desktop/source2/192.168.2.3
來源 3
/Desktop/source2/192.168.2.1
來源 4
來源 5
來源 6
.
.
.
目標
/Desktop/target/192.168.2.1
/Desktop/target/192.168.2.2
/Desktop/target/192.168.2.3
/Desktop/target/192.168.2.1.copy
/Desktop/target/192.168.2.2.copy
/Desktop/target/192.168.2.3.copy
/Desktop/target/192.168.2.1.copy.copy
原始文件沒有文件擴展名,我只是將它們命名為它們的名稱,但我在 gedit 或任何文本編輯器中打開它們。 重復的文件后綴可能是('192.168.2.3.copy 或 192.168.2.3_2 或任何需要不同的東西)
在 Linux 中使用 cp 命令、shell 腳本或任何其他命令執行此操作的方法是什么?
cp source1/* target/
cp -f --backup --suffix='.copy' source2/* target/
只要注意這不會增加.copy
后綴到在任何文件source2
而不是在source1
。 也就是說,只會為重復的文件名添加.copy
。
對於多個源文件夾,您可以執行以下操作:
cp source1/* target/
for i in {2..n} ; do
cp -f --backup=numbered source${i}/* target/
done
將n
替換為您的文件夾編號。 這將為第一個副本放置.~1~
,為第二個副本放置.~2~
,依此類推。
穆尼爾的回答是完美的。 我的聲譽太低,無法評論他的解決方案,但我想提一下為什么這樣做:
cp -f --backup --suffix='.copy' source2/* target/
通常 --backup 將備份目標文件夾中的文件,在末尾附加一個“~”。 后綴選項用復制改變“~”。 那么為什么這個解決方案會更改源文件而不是目標文件的名稱呢? 這是在行中添加了 -f 選項,這與 -f 通常所做的行為完全不同。 手冊頁的最后一段記錄了這一點:
作為一種特殊情況,當給定 force 和 backup 選項並且 SOURCE 和 DEST 與現有常規文件的名稱相同時,cp 會備份 SOURCE。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.