转换为.tbz或使用其他方式来查找差异

转换为.tbz或使用其他方式来查找差异

我有两个文件夹文件夹 A - 总共有 1786 个 dm4 文件文件夹 B - 总共有 2131 个 tbz(A 和 B 文件夹中可用的 dm4 的存档文件)文件以及不在文件夹 A 中的 124 个 dm4 文件。

目标是将所有 dm4 放在一个文件夹中,并确保文件夹 B 中没有丢失包含 tbz 文件的 dm4。但是,当我将所有丢失的 124 个 dm4 文件从文件夹 B 复制到 A 时,它会添加到 1910 个 DM4 文件。但是,我的文件夹 B 显示我有 2131 tbz。这意味着我需要知道文件夹 b 中剩余的 221 个 dm4 文件/tbz 文件的名称,因此我知道它们在我的 dm4 列表中丢失了。

在这种情况下找到我丢失的 dm4s/tbz 文件的最快方法是什么?

答案1

为了确保我理解,这是正确的吗?

您有 2131 个 .tbz 文件,每个文件都应该有一个相应的 .dm4 即 example-file-09.tbz example-file-09.dm4 但是您缺少许多相应的 dm4 文件,并且需要找到它们是哪些。

假设这是正确的,这应该可以工作(假设你的文件名中没有任何空格)

dm4_files="$(find A -name '*.dm4')"
for file in $(find B -name '*.tbz'); do 
  # || is a logical or operator; bash will only execute the right side if the left side fails (returns a non-zero exit code)
  echo -e "$dm4_files" | grep -q "$(basename $file .tbz).dm4" || echo "Missing $(basename $file .tbz).dm4"
done

编辑:由于注释格式不佳而添加运行说明

从终端运行:

  1. 将上面的 A 和 B 更改为相关目录的完整路径(或者,cd 到包含这两个目录的目录)
  2. 粘贴命令

从脚本运行:

  1. 将命令放入带有 A 和 B 的目录中名为 check-dm4.sh 的文件中(.sh 后缀不执行任何操作,但对于 shell 脚本来说是常规的)
  2. 在文件顶部插入以下行(第一行) #!/bin/bash
  3. 将文件标记为可执行文件(chmod +x check-dm4.sh,或右键单击 -> 属性/无论您的发行版如何称呼它) 4. 运行文件

相关内容