我想找到包含.txt
文件的所有目录。但我需要打印输出的上一级。
例如,我使用find
递归搜索.txt
当前目录中的文件。然后仅显示包含此类文件的目录。
find . -name "*.txt" -printf '%h\n'
输出到(例如)
./out/data
./out/data
./output/data
因此,我想改进find
以下方法的使用:
不显示重复的目录(我认为这是因为
.txt
其中有 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