在终端中合并文件夹和文件覆盖重复项

问题描述 投票:0回答:1

我有 2 个文件夹,我们称之为 X 和 Y,其中有几个子文件夹。我需要合并两者的内容,保留所有文件并覆盖重复项,以便只有 Y,包含整个内容,没有重复项,并且不会丢失任何文件。我想避免复杂的脚本或使用 cp,因为我在许多其他问题中读到,因为我只想保留一个文件夹

我真正的树是

rita/
└── X/
    └── folder1
    └── folder2
    └── foo.txt
└── Y/
    └── folder1
    └── folderA
    └── bar.txt
    └── foo.txt

mv /X/ /Y/ 

在 rita 文件夹中使用正确的命令?

我想得到这个

rita/
└── Y/
    └── folder1
    └── folder2
    └── folderA
    └── bar.txt
    └── foo.txt

或者最终我应该做什么才能得到这个?

rita/
└── Y/
    └── folder1
    └── folder1 copy
    └── folder2
    └── folderA
    └── bar.txt
    └── foo.txt
    └── foo copy.txt

谢谢

shell command-line terminal mv
1个回答
1
投票

根据其手册页,Unix

cp
命令将覆盖文件,除非:

  • 您提供
    -i
    (“交互式”),在这种情况下,系统将提示您覆盖或跳过(不提供“备份副本”选项)
  • 您提供
    -b
    (用于“备份”),在这种情况下,它将在文件名末尾附加
    ~

为了看到它的实际效果,我做了这一切:

$ mkdir temp
$ cd temp
$ touch a.txt
$ touch b.txt
$ mkdir xx
$ ls
a.txt  b.txt  xx
$ cp a.txt b.txt xx
$ ls xx/
a.txt  b.txt
$ cp -i a.txt b.txt xx
cp: overwrite 'xx/a.txt'? n
cp: overwrite 'xx/b.txt'? n
$ cp -b a.txt b.txt xx
$ ls xx/
a.txt  a.txt~  b.txt  b.txt~

注意:这是在 Linux 机器上完成的。由于 macOS 附带 old 二进制文件,因此 macOS Big Sur 和 Monterrey(2022 年此时)提供的版本不支持

-b
命令。我还没有测试过 macOS Ventura。

It Just Works™(macOS 大苏尔和蒙特雷)
#Big Sur
$ uname -v
Darwin Kernel Version 20.6.0: Mon Aug 30 06:12:21 PDT 2021; root:xnu-7195.141.6~3/RELEASE_X86_64

#Monterrey
$ uname -v
Darwin Kernel Version 21.6.0: Thu Sep 29 20:13:56 PDT 2022; root:xnu-8020.240.7~1/RELEASE_ARM64_T6000


$ cp -b a.txt b.txt xx
cp: illegal option -- b
usage: cp [-R [-H | -L | -P]] [-fi | -n] [-apvXc] source_file target_file
       cp [-R [-H | -L | -P]] [-fi | -n] [-apvXc] source_file ... target_directory

2024 年更新 - macOS Ventura

$ uname -v
Darwin Kernel Version 23.4.0: Fri Mar 15 00:10:42 PDT 2024; root:xnu-10063.101.17~1/RELEASE_ARM64_T6000

$ cp -b a.txt b.txt xx
cp: illegal option -- b

仍然无法工作。

© www.soinside.com 2019 - 2024. All rights reserved.