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

lzfw57am  于 2022-11-25  发布在  Shell
关注(0)|答案(1)|浏览(191)

我有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

感谢

ct3nt3jp

ct3nt3jp1#

根据manpage,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 & Monterey (2022年)附带的版本不支持-b命令。我还没有测试macOS Ventura。

It Just Works™(macOS大苏尔和 Monterey )
#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

相关问题