【问题标题】:Comparing files in the different directory using bash shell script [duplicate]使用bash shell脚本比较不同目录中的文件[重复]
【发布时间】:2014-05-27 16:14:22
【问题描述】:

我创建了一个脚本,它将比较不同目录中的两个文件(rpmsnewrpms)。这两个目录由文件组成。在rpms/ 一侧是旧版本文件,在newrpms/ 是更新版本。所以在这个脚本中,主要目标是比较目录中的文件,如果有相同名称的文件,删除旧的文件并用更新的文件替换它。

rpms/ -- 该目录下的文件

firefox-24.5.0-1.el5_10.i386.rpm
firefox-24.5.0-1.el5_10.x86_64.rpm
java-1.6.0-openjdk-1.6.0.0-5.1.13.3.el5_10.x86_64.rpm
java-1.6.0-openjdk-demo-1.6.0.0-5.1.13.3.el5_10.x86_64.rpm
java-1.6.0-openjdk-devel-1.6.0.0-5.1.13.3.el5_10.x86_64.rpm
java-1.6.0-openjdk-javadoc-1.6.0.0-5.1.13.3.el5_10.x86_64.rpm
java-1.6.0-openjdk-src-1.6.0.0-5.1.13.3.el5_10.x86_64.rpm
java-1.7.0-openjdk-1.7.0.55-2.4.7.1.el5_10.x86_64.rpm
java-1.7.0-openjdk-debuginfo-1.7.0.55-2.4.7.1.el5_10.x86_64.rpm
java-1.7.0-openjdk-devel-1.7.0.55-2.4.7.1.el5_10.x86_64.rpm
java-1.7.0-openjdk-javadoc-1.7.0.55-2.4.7.1.el5_10.x86_64.rpm

newrpms/ -- rpms/目录下需要替换旧文件的更新文件

firefox-25.5.0-1.el5_10.i386.rpm
firefox-25.5.0-1.el5_10.x86_64.rpm
java-1.6.0-openjdk-1.6.0.0-5.1.13.3.el5_10.x86_64.rpm
java-1.6.0-openjdk-demo-1.6.0.0-5.1.13.3.el5_10.x86_64.rpm
java-1.6.0-openjdk-devel-1.6.0.0-5.1.13.3.el5_10.x86_64.rpm
java-1.6.0-openjdk-javadoc-1.6.0.0-5.1.13.3.el5_10.x86_64.rpm
java-1.6.0-openjdk-src-1.6.0.0-5.1.13.3.el5_10.x86_64.rpm

请看下面的脚本。

for i in $(\ls -d ./rpms/*);
do diff ${i} newrpms/; 
done

对于上面的代码,没有任何反应。谁能帮我解决我的问题。我想要的只是比较两个目录并获得相同的文件,当且仅当rpms/ 目录中没有与newrpms/ 相同的文件时,将其从newrpms/ 移动到rpms/ nad 如果它们具有相同的文件名但只有一小部分不一样。检查它是最新的。 例如。

firefox-24.5.0-1.el5_10.i386.rpm --> in the rpms/
firefox-25.5.0-1.el5_10.i386.rpm --> in the newrpms/

所以最新的一个在newrpms/。删除rpms/ 中的firefox-24.5.0-1.el5_10.i386.rpm 并将firefox-25.5.0-1.el5_10.i386.rpm 移动到rpms/

【问题讨论】:

    标签: linux bash loops mv


    【解决方案1】:

    很难知道您的脚本出了什么问题。你确定新旧目录下的rmps有区别吗?您是否尝试过 diff-s 选项会报告相同的文件?

    但无论如何,脚本对于您要执行的任务来说太复杂了。这应该是等效的命令:

    diff rpms newrpms
    

    如果一个目录中的文件在另一个目录中不存在,则会在输出中注明。并且还会报告二进制文件的差异。但你可能甚至不需要这样做。为什么不使用cp 命令简单地将文件从newrpms 复制到rpms?或者,如果您想更复杂,请使用rsync

    rsync -av newrpms rpms
    

    这将检查newrpms 中的任何文件是否比rpms 中的文件新,并且仅在需要时执行复制。 (查看man rsync了解更多详情。)

    【讨论】:

    • 您好,先生,感谢您的回复。但是,我应该需要逐个字符地比较文件。可以把它放在一个数组中吗?你怎么看?
    • 您可能不想使用数组,diff 也不会这样做。请改用cmp。但是您确定这就是您所需要的吗?你看过rsync吗?
    • 还没我试穿。
    • 我想先生,我不知道rsync。因为它不适合我应该做什么。
    • 我如何比较目录中的文件先生,每个字符的字符,因为拥有这些文件非常棘手。
    猜你喜欢
    • 1970-01-01
    • 2014-02-18
    • 2019-06-29
    • 2016-03-02
    • 1970-01-01
    • 1970-01-01
    • 2012-11-25
    • 2020-12-10
    • 1970-01-01
    相关资源
    最近更新 更多