我已经创建了一个脚本,它将比较不同目录(rpms和newrpms)中的两个文件。这两个目录由文件组成。在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.rpmnewrpms/ --需要替换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/到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/中
发布于 2014-05-27 13:54:48
很难知道你的脚本出了什么问题。您确定新旧目录中的rmps之间存在差异吗?您是否尝试过将报告相同文件的diff的-s选项?
但在任何情况下,脚本对于您试图执行的任务来说都太复杂了。这应该是等效的命令:
diff rpms newrpms如果一个目录中的文件在另一个目录中不存在,则会在输出中记录下来。并且二进制文件中的差异也将被报告。但您可能甚至不需要这样做。为什么不使用cp命令简单地将文件从newrpms复制到rpms?或者,如果您想变得更复杂,可以使用rsync
rsync -av newrpms rpms这将检查newrpms中是否有比rpms中的文件新的文件,并仅在需要时执行复制。(更多详细信息,请查看man rsync。)
https://stackoverflow.com/questions/23881667
复制相似问题