gpt4 book ai didi

awk - 如何区分两个不同目录中的不同文件并将不同的文件存储在新目录中

转载 作者:行者123 更新时间:2023-12-04 09:45:23 25 4
gpt4 key购买 nike

我有两个目录,dir1 和 dir2,其中分别包含 m 和 n 文件。条件可以是 m>n 或 m

我想比较两个目录中的文件,并将比较后的文件存储在新目录 diffdir 中。

所以 diffdir 应该只有在两个目录中都不同的文件。

我用了

diff -r dir1 dir2 |  grep dir2

它给了我两个目录中不同的文件
diff -r dir1/DISP.case_sc.in.XXX dir2/**DISP.case_sc.in.XXX**

其中 XXX 可能在 001 到 999 之间变化(我在这里手动添加了 ** 以使名称变粗)。
我只需要 diffdir 中的文件(粗体)

由于两个目录中的文件数量不同,因此在 m>n 的情况下,它也作为上述命令的输出提供(diff -r dir1 dir2 | grep dir2)
Only in dir2: DISP.case_sc.in.YYY

我还想要 diffdir 中的这些 DISP.case_sc.in.YYY 文件。这里 YYY 是等于差值 m-n 的文件数。例如,如果 m=020 和 n=010,那么这个 YYY 将在 011 到 020 之间变化。

在两个目录 (1&2) 中,有些文件将完全相同,但未使用 diff 命令打印,我需要将这些文件放在另一个目录名称 nodiffdir 中。

带有命名文件的示例输入以表明它们之间的关系:
dir1
dir1_only
comm_diff
comm_same

dir2
dir2_only
comm_diff
comm_same

预期输出(dir1 和 dir2 保持不变):
samedir
comm_same # copied as-is from dir1 or dir2

diffdir
comm_diff # output of "diff dir1/comm_diff dir2/comm_diff"
dir1_only # copied as-is from dir1
dir2_only # copied as-is from dir2

最佳答案

这可能对你有用(GNU sed):

mkdir dir3
diff -r dir1 dir2 |
sed '/dir2/!d;s#: #/#;s/.* //;s/.*/cp & &/;s/dir2/dir3/2'

创建一个新目录 dir3
区分两个目录 dir1dir2并将输出通过管道传输到 sed 调用。

转换包含 dir2 的每一行进入复制命令。

如果输出与您期望的匹配,则通过添加 e 进行真实复制。命令:
mkdir dir3
diff -r dir1 dir2 |
sed '/dir2/!d;s#: #/#;s/.* //;s/.*/cp & &/;s/dir2/dir3/2;e'

关于awk - 如何区分两个不同目录中的不同文件并将不同的文件存储在新目录中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62151773/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com