比较两个不同目录中的文件

时间:2014-08-26 00:08:19

标签: bash

在下面的bash脚本中,我试图比较两个文件夹的文件。文件夹f1中的文件如果存在于文件夹f2中,则会被删除。

#!bin/bash

for i in  `dir f1/*`
do
     for j in `dir f2/*`
     do
          if [[ $i = $j ]]
          then
                   `rm -fr f1/$i`
          else
          fi
    done
done

我也尝试过:

#!bin/bash

for i in  f1/*
do
     for j in f2/*
     do
          if [[ $i = $j ]]
          then
                   rm -fr f1/$i
          else
          fi
    done
done

但两人都给了我syntax error near unexpected token 'fi'

我使用/缺少反叛或括号是对的吗?

1 个答案:

答案 0 :(得分:3)

此脚本为f2中的每个文件循环遍历f1的内容(对于大型f1目录而言效率非常低)。

你几乎可以肯定地使用类似rsync或简单地用rm之类的东西以更简单的方式做到这一点。

话虽如此,也没有理由测试文件名等价(尤其是在使用rm -f时)。如果您只想按名称访问文件,则不需要测试文件名等效,因为您已经知道了外部循环所关注的名称。此外,如果要使用rm -f删除文件,则甚至不需要存在测试,因为rm -f没有失败,即使给定的文件不存在也是如此。

话虽如此,根本没有理由循环f1。只需循环f2并删除(使用rm -f,不需要-r,除非您希望删除目录)f1中与f2中具有相同基本名称的任何文件{1}}:

for file in f2/*; do
    rm -f f1/"$(basename "$file")"
done