合并两个文件夹并保持文件具有相同的名称

时间:2017-05-04 19:01:31

标签: linux shell ubuntu command-line

我有多个源文件夹(这些文件夹有很多名为ip address 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或任何只需要不同的内容)

使用cp命令,shell脚本或Linux中的任何其他命令执行此操作的方法是什么?

2 个答案:

答案 0 :(得分:1)

cp source1/* target/
cp -f --backup --suffix='.copy' source2/* target/

请注意,这不会为.copy中的source2source1中的任何文件添加.copy后缀。也就是说,只会为重复的文件名添加cp source1/* target/ for i in {2..n} ; do cp -f --backup=numbered source${i}/* target/ done

对于多个源文件夹,您可以执行以下操作:

n

.~1~替换为您的文件夹编号。这将为第一个副本.~2~,第二个副本> '93k03k30dk30483'.match(/[0-9]/g).length 11 ,依此类推。

答案 1 :(得分:1)

穆尼尔的答案是完美的。我的声誉太低,无法对他的解决方案发表评论,但是我想在此提一下为什么可行:

cp -f --backup --suffix='.copy' source2/* target/

通常--backup将在目标文件夹中备份文件,方法是在文件末尾附加一个“〜”。后缀选项更改带副本的“〜”。那么,为什么该解决方案更改源文件的名称而不更改目标文件的名称?这是在行中添加-f选项的行为,与-f通常所做的行为完全不同。手册页的最后一段对此进行了记录:

在特殊情况下,当指定了force和backup选项且SOURCE和DEST与现有常规文件的名称相同时,cp会备份SOURCE。