【问题标题】:Compare files and versions in two directories, one of which has symlinks?比较两个目录中的文件和版本,其中一个有符号链接?
【发布时间】:2017-03-20 13:16:39
【问题描述】:

我们正在将一些实用程序从旧项目转移到新的受版本控制的项目中(在同一个磁盘上,使用不同的用户名),我的任务是查找属于旧项目的实用程序帐户但不是新帐户,并查找两个帐户之间不同的文件。新帐户已经使用了大约一年,人们对旧帐户中的某些文件进行了(少量)更改,而没有在新帐户中进行更改。

这些实用程序位于我只有读取权限的远程服务器上(我自己的主文件夹除外)。

旧帐户称为 user1,其所有实用程序都位于 ~user1/bin/ 文件夹中,包括每个实用程序的源代码、可执行文件和脚本。

新帐户(例如 user2)已设置为 ~user2/bin/ 文件夹中的每个“可执行文件/脚本”都是指向子文件夹 ~user2/src/{utilityname} 中相应文件的符号链接/,其中还包含该可执行文件的源代码。

有没有比比较两个目录更简单的方法

find ~user1/bin/ -maxdepth 1 -printf '%s, %p\n' | sort -k2 > user1.txt
find -L ~user2/bin/ -maxdepth 1 -printf '%s, %p\n' | sort -k2 > user2.txt

并手动比较结果以查看有什么不同/缺少什么?

此外,上述命令只能让我比较 ~user2/bin/ 文件夹中的可执行文件/脚本,即使 ~user2/src/{utilityname}/ 中的源代码在 user1 和user2(例如,由于脚本中的路径不同)。是否可以在实用程序的符号链接目标所在的文件夹中搜索同名的源文件,以便我可以直接比较 user1 和 user2 之间的源文件?

【问题讨论】:

  • 也许可以试试diff -r ~/user1/bin ~/user2/bin,因为你只会深入 1 层。
  • @I'L'I 是的,我已经尝试过diff -r,它适用于 bin 文件夹,并显示了 ~user2/bin 中缺少的内容,但要比较版本,我需要比较来源。用户 1 的源位于 ~user1/bin 中,但用户 2 位于 ~user2/src/{utilityname} 中,~user2/bin 中的源文件没有符号链接。现在,对于两个 bin 中的每个“实用程序名称”脚本/可执行文件,我手动将源代码与 diff ~user1/bin/utilityname.c ~byab334/src/utilityname/utilityname.c
  • 可惜你只有读权限;制作符号链接可以解决大部分问题。您可以做的另一件事是创建某种类型的映射文件,将某些文件/目录配对,尽管这可能不是一个理想的解决方案。

标签: linux bash unix find


【解决方案1】:

我会使用不同的方法:查找没有重复的文件。我建议this thread,尤其是结合fdupesfindgrep的部分:

fdupes -r backup/ documents/ > dup.txt
find backup/ -type f | grep -Fxvf dup.txt

不过,它可能需要进行更多调整以适应您的需求,例如使用 fdupes 的“-s”选项。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-19
    • 2010-12-26
    • 2014-12-11
    相关资源
    最近更新 更多