搜索目录时更改查找深度

搜索目录时更改查找深度

我想找到包含.txt文件的所有目录。但我需要打印输出的上一级。

例如,我使用find递归搜索.txt当前目录中的文件。然后仅显示包含此类文件的目录。

find . -name "*.txt" -printf '%h\n'

输出到(例如)

./out/data
./out/data
./output/data

因此,我想改进find以下方法的使用:

  1. 不显示重复的目录(我认为这是因为.txt其中有 2 个文件)

  2. 我只想打印第一层,即仅./out/./output/

答案1

可能有一种更find以 - 为中心的方法,但您可以使用其他一些工具来帮助实现:

find . -name '*.txt' -printf '%h\n' | cut -f1,2 -d/ | sort -u

或者我想我们可以保存一个过程并使用awk类似

find . -name '*.txt' -printf '%h\n' | awk -F/ '{matched[$1"/"$2]=1} END {for(dir in matched) {print dir}}'

答案2

为什么不将结果传输到其他一些工具进行进一步处理,如下所示:

find . -name "*.txt" -printf '%h\n'| sort | uniq | cut -d'/' -f1,2   

答案3

用于sed仅保留路径中的第一个目录名称,然后sort仅保留相等运行的第一行:

find . -name "*.txt" -printf '%h\n' |
sed -e 's#^\(\./[^/]*\).*#\1#' |
sort -u

相关内容