我有一个文件foo和一个文件夹栏。文件夹栏是一个多级目录,最终有文件:
bar/1/123/file
bar/2/12/file
bar/1/1/file
foo与其中一个文件相同,我试图找到它是哪一个。我怎么能在linux上这样做?我想这将是使用find命令。
答案 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的文件。如果没有找到差异,则文件名将打印到屏幕。请注意,您不会使用每个差异的输出发送垃圾邮件。