【问题标题】:merge two folders and keeping the files have same name合并两个文件夹并保持文件同名
【发布时间】:2017-05-04 19:01:30
【问题描述】:

我有多个源文件夹(这些文件夹有很多文件,例如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 脚本或任何其他命令执行此操作的方式是什么?

【问题讨论】:

  • 我说的是直截了当:您获取现有文件的列表,对其进行迭代并根据条件确定是否存在具有该文件的名称。如果不是,则简单复制,否则复制并重命名。

标签: linux shell ubuntu command-line


【解决方案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~,依此类推。

【讨论】:

  • 有 2 个问题。这种方法有效。但我没有在问题中提到这一点,但现在会更新它。如果我在尝试从其他地方复制文件时有多个来源,我还必须将该文件保存在目标文件夹中。那么在这种情况下我该怎么办?我查看了 cp 的手册页并没有看到 --suffix。你在哪里看到“--suffix”?
  • 查看我为多个文件夹编辑的答案。 --suffix 在手册页中也是 -S。我更喜欢 long 选项,因为它更清楚它的作用。
  • 谢谢,@Munir 工作正常!我玩了一点,这也有效cp -v --suffix='_'$i source${i}/* target/
【解决方案2】:

Munir 的回答是完美的。我的声誉太低,无法评论他的解决方案,但我想提一下为什么会这样:

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

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

作为一种特殊情况,当给定 force 和 backup 选项并且 SOURCE 和 DEST 与现有常规文件的名称相同时,cp 会备份 SOURCE。

【讨论】:

  • 请不要回答评论/问题。可以理解的是,您的代表太低而无法发表评论,但这并不意味着应该使用答案来使 cmets 作为替代方案。最好把它删掉。
  • 是的,这不会发生。
猜你喜欢
  • 2021-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-21
相关资源
最近更新 更多