2016-11-09 223 views
0

我想比较两个文件夹以查看里面的文件是否相同。如果它是相同的,那么我将这些文件移动到另一个文件夹中。例如:使用shell脚本比较两个文件夹中的文件

f1      f2 
    ------    -------- 
    test1     test3 
    test2     test4 
         test1 

这里test1.txt文件可在这两个文件夹,所以我需要那个文件移动到另一个文件夹。

这是如何使用shell脚本完成的?

回答

0

迭代第一个目录中的文件。对于其中的每个文件,检查它是否存在于其他目录中。如果存在,则将这两个文件移动到另一个目录。

0
for F in f1/* 
do 
    test -f $F && test -f f2/${F#*/} && echo cp $F f3/ 
done 

在这种情况下了解参数扩展是一个好主意。以上,构造${F#*/}相当于$(basename $F),但速度要快得多,因为它对每次迭代都不执行基本名称(1)。

如果你有大量的文件,而你并不真的需要测试文件是否定期文件,则可能避免环路,通过生成一个脚本加快速度。类似于:

mkfifo .f1 .f2 
(cd f1 && ls > ../.f1)& (cd f2 && ls > ../.f2)& 
comm -12 .f1 .f2 | sed 's:^.*$:cp f1/& f3/:' | sh 
rm .f1 .f2 

为了说明的缘故,我假定文件名不包含空格或其他奇怪的字符。如果他们这样做,当然参数将需要引用。