复制差异结果文件

复制差异结果文件

我有两个文件夹 - 文件夹 A 和文件夹 B。

我使用 diff 命令比较了两个文件夹中的文件。现在,在发现某些文件仅在文件夹 A 中可用且某些文件仅在文件夹 B 中可用后,我想将这两个文件夹中的这些独特文件复制到 1 个名为文件夹 C 的文件夹中,该文件夹现在将包含 A 和 B 中的所有唯一文件

我怎样才能做到这一点?

答案1

你可以使用zsh 的数组减法和大括号扩展功能,像这样:

设置:

$ tree .
.
├── folderA
│   ├── file0
│   ├── file1
│   └── file2
├── folderB
│   ├── file2
│   ├── file3
│   └── file4
└── folderC

3 directories, 6 files


cd folderA
A=(*)
cd ../folderB
B=(*)
cd ..

执行:

cp folderA/${^A:|B} folderB/${^B:|A} folderC

结果:

$ tree folderC
folderC
├── file0
├── file1
├── file3
└── file4

0 directories, 4 files

这两个设置步骤分别创建包含文件夹 A 和 B 中的文件名的数组(名为A和)。B

执行步骤要求将数组减去数组cp的扩展(全部以 为前缀)以及数组减去数组(全部以 为前缀)的相应扩展复制到 中。ABfolderABAfolderBfolderC

答案2

diff使用,sed和的hacky 解决方案xargs

测试设置:

$ mkdir folderA folderB folderC
$ touch folderA/fi\ le1 folderA/file2 folderA/file3 folderB/file3 folderB/file4
$ diff -rq folderA folderB
Only in folderA: fi le1
Only in folderA: file2
Only in folderB: file4

现在我们用来sed过滤所有以字符串开头的行Only in folderA:,并将这部分更改为folderA/带引号()的相对文件名'folderA/fi le1'。然后将该字符串通过管道传送到xargs并用于将该文件复制到folderC.

$ diff -rq folderA folderB | sed -n "s/^Only in \(folderA\): \(.*\)/'\1\/\2'/p" | xargs cp -vt folderC
'folderA/fi le1' -> 'folderC/fi le1'
'folderA/file2' -> 'folderC/file2'

与上面相同folderB

$ diff -rq folderA folderB | sed -n "s/^Only in \(folderB\): \(.*\)/'\1\/\2'/p" | xargs cp -vt folderC
'folderB/file4' -> 'folderC/file4'

相关内容