我有 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
谢谢
根据其手册页,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。
#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
$ 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
仍然无法工作。