我创建了一个脚本,它会比较不同目录(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.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/
。移除firefox-24.5.0-1.el5_10.i386.rpm
中的rpms/
并将firefox-25.5.0-1.el5_10.i386.rpm
移至rpms/
答案 0 :(得分:1)
很难知道你的脚本出了什么问题。您确定新旧目录中的rmps之间存在差异吗?您是否尝试过报告相同文件的-s
diff
选项?
但无论如何,脚本对于您尝试执行的任务来说太复杂了。这应该是等效的命令:
diff rpms newrpms
如果一个目录中的文件在另一个目录中不存在,则会在输出中记录。并且还会报告二进制文件的差异。但你可能甚至不需要这样做。为什么不使用cp
命令将文件从newrpms
复制到rpms
?或者,如果您想要更复杂,请使用rsync
:
rsync -av newrpms rpms
这将检查newrpms
中的任何文件是否比rpms
中的文件更新,并且仅在需要时执行复制。 (查看man rsync
了解更多详情。)