如何在查找时显示不同的目录?

如何在查找时显示不同的目录?

我想查找包含例如名为 *.txt 的文件的所有目录。但输出不得包含重复项。怎么做?

答案1

尝试:

find . -type f -name "*.txt" -printf '%h\n' | sort | uniq

其工作原理如下:

find . -type f -name "*.txt" -printf '%h\n'- 查找所有以 ( ) 结尾的文件*.txt并打印其目录 ( %h),后跟换行符。

| sort- 对目录进行排序

| uniq- 删除重复项

答案2

POSIX 兼容应该适用的代码任何文件名:

find . -name '*.txt' -printf '%h\0' | tr '\0\n' '\n\0' | sort -u | tr '\0\n' '\n\0'

答案3

问题可能是目录名称可以包含换行符,因此 find 的输出应该以 NUL 终止。为了使排序结果具有可读的输出管道tr

find . -name "*.txt" -printf '%h\0' | sort -zu | tr '\0' '\n'

目录名称中的任何换行符都可以通过查看下一行来确定,如果它开头./不是目录中的换行符。

答案4

使用 GNUfind和 bash

find . -type d -exec bash -c \
$'for f; do find \"$f\" -maxdepth 1 -type f  -name \'*.txt\' -printf \'%h\\n\' -quit; done'\
_ {} +

相关内容