我有多个源文件夹(这些文件夹有很多名为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中的任何其他命令执行此操作的方法是什么?
答案 0 :(得分:1)
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~
,第二个副本> '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。