实施变更捕获

实施变更捕获

我有两个目录,即 "before" 和 "after" ,每个目录都有它的子目录和文件。我想从深度 1 级别显示这两个文件夹之间的所有增量更改。

What is I mean is to compare the outputs of the following  
commands and display the differences.

1. find before/ -mindepth 1
2. find after/ -mindepth 1

After cimparison I want to display the following:
a."A" before files/folders present ONLY in the after/ 
     hierarchy(these will be deemed as newly added 
      components)
b. "D" before files/folders present ONLY in the before/ 
     hierarchy(these will be deemed as deleted
      components)
c. "M" before files/folders present in BOTH before/  and 
     after/  hierarchies(these will be deemed as modified
      components)

答案1

也许比diff-ing 更好的输出是这样的:

#!/bin/sh -eux

find before -mindepth 1 -printf "%p D\n" | cut -d/ -f2- | sort > files-before
find after -mindepth 1 -printf "%p A\n" | cut -d/ -f2- | sort > files-after
join -a2 -a1 files-before files-after | sed 's/D A$/M'

在哪里:

  • 我们搜索所有before文件after
  • 省略beforeafter目录本身 ( -mindepth 1),
  • 附加D到在 下找到的文件beforeA下的文件after
  • 从所有找到的文件中删除路径的第一个组成部分(cut),
  • 对结果进行排序并存储在两个单独的文件中。

最后一条命令:

  • 将谈论同一文件的行配对(请参阅man join),以便每个文件(相对于搜索目录,因为我们删除了它)仅出现一次,如果D文件位于beforeA如果它位于afterD A如果它同时位于两者中),
  • 我们包含仅出现在输入文件之一(-a1 -a2)中的文件名,
  • 最后,如果文件同时具有DA标志,我们将其更改为M按要求。

相关内容