![如何使用find命令使得它从最内层的目录进行匹配?](https://linux22.com/image/1467056/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8find%E5%91%BD%E4%BB%A4%E4%BD%BF%E5%BE%97%E5%AE%83%E4%BB%8E%E6%9C%80%E5%86%85%E5%B1%82%E7%9A%84%E7%9B%AE%E5%BD%95%E8%BF%9B%E8%A1%8C%E5%8C%B9%E9%85%8D%EF%BC%9F.png)
假设我有以下文件
this/is/my/file.txt
如果我只知道该文件在/my/
目录中,我可以搜索该文件吗?
答案1
如何将find
文件放在最内层的目录中?
您可以使用find
查找特定文件(file.txt
),它将为您递归(根据指定的选项)。但是,如果您有两个file.txt
s,并且只想匹配,该怎么办?一,比如在脚本中使用?输入awk
、sort
和:head
cut
find /my/ -type f -name file.txt | awk -F/ '{ print NF-1, $0 }' | sort -nr | head -n1 | cut -d " " -f2
这将返回一个结果 -最深匹配-或无。
解释
find
在/my/
所有常规文件中 (-type f
)-name
dfile.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)-release
OSX 上)进行了测试,并且不太依赖 GNUisms。