我有一个文件,我想对其他目录中的所有文件进行区分,以找出哪一个是相同的

时间:2018-05-17 16:40:33

标签: linux bash shell

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

foo与其中一个文件相同,我试图找到它是哪一个。我怎么能在linux上这样做?我想这将是使用find命令。

3 个答案:

答案 0 :(得分:0)

如果你的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

globstar选项允许使用bar/**/*表示“目标树中以bar为首的所有文件”,是在2009年发布的bash 4.0中引入的。(很遗憾) ,OS X上默认不安装该版本。)

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

答案 1 :(得分:0)

执行此操作的一种方法(避免不同版本的bash的兼容性问题)是让find为您执行递归并直接运行cmp

find bar -type f -exec cmp -s -- foo '{}' ';' -print

答案 2 :(得分:-1)

可能有所帮助的小型单线:

for FILE in $(find . -type f -name file); do diff $FILE foo &>/dev/null && echo $FILE;done

这会将当前位置的所有子目录中找到的每个文件与名称" file"进行比较。针对名为foo的文件。如果没有找到差异,则文件名将打印到屏幕。请注意,您不会使用每个差异的输出发送垃圾邮件。