首页 > 解决方案 > 我有一个文件,我想将它与另一个目录中的所有文件进行比较,以找出哪个相同

问题描述

我有一个文件 foo 和一个文件夹栏。文件夹栏是一个多级目录,最终有文件: bar/1/123/file bar/2/12/file bar/1/1/file

foo 与其中一个文件相同,我正在尝试查找它是哪个文件。我怎么能在Linux上做到这一点?我想它将与 find 命令一起使用。

标签: linuxbashshell

解决方案


如果您的 bash 不是旧石器时代的,您可以使用纯 bash 轻松做到这一点:

shopt -s globstar
for f in bar/**/*; do
  if [[ -f "$f" ]] && cmp -s foo "$f"; then
    printf "The matched file is '%s'\n" "$f"
    break
  fi
done

2009 年发布的 bash 4.0 中引入了该globstar选项,它允许使用bar/**/*表示“目录树中以 .bar

breakin 循环是一种优化,它在找到一个文件后停止搜索,因为问题描述清楚地说明了“其中一个文件” 。如果可能有多个匹配项并且您需要知道所有匹配项,请删除break.


推荐阅读