递归比较两个目录,忽略单个单词

递归比较两个目录,忽略单个单词

我想递归地比较两个目录,忽略一个特定的字符串替换。

例如,在一个目录中,某些文件包含字符串“abcd”,而在另一目录中,“abcd”在这些相同文件中已被重命名为“wxyz”。我想看到两个目录之间的所有差异,除了将“abcd”重命名为“wxyz”之外。

在这种情况下,替换长度实际上与原始长度(“abcd”和“wxyz”)相同,尽管针对不同字符串长度的通用解决方案也很有趣。

我怎样才能做到这一点?

答案1

解决这个问题的一种方法是预处理一组文件之一(您的问题指出所有folder1的文件可能有A B C D并且folder2的文件可能有西西

例如,find可以在一棵树中进行文件搜索,比如说文件夹1,并将其提供给脚本。

在脚本内部,您对输入文件运行替换并将结果通过管道传递给 diff,这将比较其标准输入与另一棵树上的相应文件。

我假设您在两棵树上都有一组文件,如果不是这种情况,您可以添加代码来处理它(其中也有标志diff可能会有所帮助)。

最低版本如下所示(例如,您可以添加多个替换)。请注意,您还必须确保替换代码执行您需要执行的操作,例如仅更改单词而不更改子字符串)。

find folder1 -type f -printf "%P\n" |
while read myfile
do
    sed 's/abcd/wxyz/g' folder1/$myfile | diff -u folder2/$myfile -
done

可能有更简洁的方法,但这清楚地显示了您可以添加一些逻辑的地方。

相关内容