首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用bash shell脚本比较不同目录中的文件

使用bash shell脚本比较不同目录中的文件
EN

Stack Overflow用户
提问于 2014-05-27 13:31:54
回答 1查看 313关注 0票数 1

我已经创建了一个脚本,它将比较不同目录(rpmsnewrpms)中的两个文件。这两个目录由文件组成。在rpms/端,它是旧版本的文件,而在newrpms/中,是更新的文件。因此,在此脚本中,主要目标是比较目录中的文件,如果存在相同名称的文件,则删除较旧的文件并将其替换为更新后的文件。

rpms/ --此目录中的文件

代码语言:javascript
复制
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/目录中的旧文件的更新文件

代码语言:javascript
复制
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

请看下面的脚本。

代码语言:javascript
复制
for i in $(\ls -d ./rpms/*);
do diff ${i} newrpms/; 
done

对于上面的代码,什么都没有发生。有人能帮我解决我的问题吗?所有我想要的是比较这两个目录,并得到相同的文件,如果和只有当在rpms/目录中没有相同的文件,如果有从newrpms/rpms/ nad,如果他们有相同的文件名,但只有很少的部分是不同的,这是非常容易理解的。检查它的最新版本。例如。

代码语言:javascript
复制
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/

EN

回答 1

Stack Overflow用户

发布于 2014-05-27 13:54:48

很难知道你的脚本出了什么问题。您确定新旧目录中的rmps之间存在差异吗?您是否尝试过将报告相同文件的diff-s选项?

但在任何情况下,脚本对于您试图执行的任务来说都太复杂了。这应该是等效的命令:

代码语言:javascript
复制
diff rpms newrpms

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

代码语言:javascript
复制
rsync -av newrpms rpms

这将检查newrpms中是否有比rpms中的文件新的文件,并仅在需要时执行复制。(更多详细信息,请查看man rsync。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23881667

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档