Linux 使用bashshell脚本比较不同目录中的文件

Linux 使用bashshell脚本比较不同目录中的文件,linux,bash,loops,mv,Linux,Bash,Loops,Mv,我创建了一个脚本,它将比较不同目录中的两个文件(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.e

我创建了一个脚本,它将比较不同目录中的两个文件(
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
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
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
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是很容易理解的,如果它们有相同的文件名,但只有很少的部分不是相同的。检查它是否是最新的。 前


因此最新的一个在
newrpms/
中。删除
rpms/
中的
firefox-24.5.0-1.el5\u 10.i386.rpm
,并将
firefox-25.5.0-1.el5\u 10.i386.rpm
移动到
rpms/
很难知道脚本出了什么问题。您确定新旧目录中的RMP之间存在差异吗?您是否尝试过将报告相同文件的
diff
-s
选项

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

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

rsync -av newrpms rpms

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

您好,先生,谢谢您的回复。但是,我应该需要逐个字符地比较文件。可以把它放在一个数组中吗?你觉得呢?你可能不想使用数组,而
diff
也不会起作用。改为尝试
cmp
。但你确定这就是你需要的吗?你看过rsync吗?还没有,我要试穿一下。我想先生,我不知道rsync。我怎样才能比较目录中的文件,先生,每个字符一个字符,因为拥有这些类型的文件是非常困难的。