使用shell脚本比较两个文件夹中的文件

时间:2016-11-09 11:48:09

标签: sh

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

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

此处test1.txt文件在两个文件夹中都可用,因此我需要将该文件移动到另一个文件夹中。

如何使用shell脚本完成此操作?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

在这种情况下了解参数扩展是一个好主意。上面,构造${F#*/}相当于$(basename $F),但更快,因为它不会为每次迭代执行 basename (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

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