如何使用find命令使得它从最内层的目录进行匹配?

如何使用find命令使得它从最内层的目录进行匹配?

假设我有以下文件

this/is/my/file.txt

如果我只知道该文件在/my/目录中,我可以搜索该文件吗?

答案1

如何将find文件放在最内层的目录中?

您可以使用find查找特定文件(file.txt),它将为您递归(根据指定的选项)。但是,如果您有两个file.txts,并且只想匹配,该怎么办?,比如在脚本中使用?输入awksort和:headcut

find /my/ -type f -name file.txt | awk -F/ '{ print NF-1, $0 }' | sort -nr | head -n1 | cut -d " " -f2

这将返回一个结果 -最深匹配-或无。

解释

  • find/my/所有常规文件中 ( -type f) -namedfile.txt

  • 传递给,并通过将字段分隔符设置为( ) 并将其作为结果的前缀 ( )awk来计算目录的数量(深度)/-F/print NF-1, $0

  • sort从数字上看,从最大(即大多数目录)开始

  • 只取一个结果 ( head -n1)

  • 去掉深度计数 ( cut -d " " -f2)

可能有更短的方法,但这将返回最深的结果。它假设使用斜线/来划分目录,但我认为我们可以允许这样做。在GNU bash, version 4.3.30(1)-release(和GNU bash, version 3.2.53(1)-releaseOSX 上)进行了测试,并且不太依赖 GNUisms。

相关内容