比较两个文件夹中具有相似名称的文件内容

时间:2013-06-06 13:19:30

标签: linux shell grep diff

我有两个文件夹(我将使用数据库名称作为示例):

  • MongoFolder /
  • CassandraFolder /

这两个文件夹里面有类似的文件:

  • MongoFolder /

    • MongoFile
    • MongoStatus
    • MongoConfiguration
    • MongoPlugin
  • CassandraFolder /

    • CassandraFile
    • CassandraStatus
    • CassandraConfiguration

这些文件的内容也非常相似,例如只更改数据库的名称,因此它们都只有代码或配置,只更改Mongo的名称Cassandra

如何比较这两个文件夹,结果是文件从一个文件夹丢失到另一个文件夹(例如 CassandraFolder 文件 CassandraPlugin )以及文件内容相似,必须类似,只更改数据库名称。

2 个答案:

答案 0 :(得分:1)

这将为您提供丢失文件的名称(减去数据库名称):

find MongoFolder/ CassandraFolder/ | \
      sed -e s/Mongo//g -e s/Cassandra//g | sort | uniq -u

输出:

Folder/Plugin

答案 1 :(得分:1)

以下提供了完整的差异,包括丢失的文件和更改的内容:

cp -r CassandraFolder cmpFolder
# rename files
find cmpFolder -name "Cassandra*" -print | while read file; do
    mongoName=`echo "$file" | sed 's/Cassandra/Mongo/'`
    mv "$file" "$mongoName"
done
# fix content
find cmpFolder -type f -exec perl -pi -e 's/Cassandra/Mongo/g' {} \;

# inspect result
diff -r MongoFolder cmpFolder # or use a gui tool like kdiff3

我没有对此进行过测试,请随意修复错误或询问具体内容是否不清楚。 您可以使用mv代替rename,但在不同版本的linux上有所不同。