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。我怎样才能比较目录中的文件,先生,每个字符一个字符,因为拥有这些类型的文件是非常困难的。