获取包含文件名包含字符串的子目录的列表

穆德

如何获得包含名称与特定模式匹配的文件的子目录列表?

更具体地说,我正在寻找包含文件名中带有字母“ f”的文件的目录。

理想情况下,该列表将没有重复项,仅包含不带文件名的路径。

约翰1024
find . -type f -name '*f*' | sed -r 's|/[^/]+$||' |sort |uniq

上面的代码查找当前目录(.下的所有文件,这些文件是常规文件(-type f),并且文件f名中的某处(-name '*f*')。接下来,sed删除文件名,仅保留目录名。然后,对目录列表进行排序(sort),并删除重复项(uniq)。

sed命令由单个替代项组成。它查找与正则表达式/[^/]+$匹配的内容,并将所有不匹配的内容替换为正则表达式美元符号表示行尾。[^/]+'表示一个或多个非斜杠字符。因此,/[^/]+$表示从最后斜杠到行尾的所有字符。换句话说,这与完整路径末尾的文件名匹配。因此,sed命令删除文件名,而文件所在目录的名称保持不变。

简化版

许多现代sort命令都支持一个-u标志,这使得uniq不必要。对于GNU sed:

find . -type f -name '*f*' | sed -r 's|/[^/]+$||' |sort -u

并且,对于MacOS sed:

find . -type f -name '*f*' | sed -E 's|/[^/]+$||' |sort -u

另外,如果您的find命令支持它,则可以find直接打印目录名称。这避免了以下需求sed

find . -type f -name '*f*' -printf '%h\n' | sort -u

更强大的版本(需要GNU工具)

上面的版本会被包含换行符的文件名混淆。一个更健壮的解决方案是对NUL终止的字符串进行排序:

find . -type f -name '*f*' -printf '%h\0' | sort -zu | sed -z 's/$/\n/'

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

的Python:列出目录/子目录与文件名

如何从包含绝对文件路径的字符串中获取文件名?

从包含文件名的字符串中提取模式

如何使用grep / egrep对包含“字符串”的子目录中的文件进行计数

Python:文件名包含字符串(元字符?)

如何获取子目录中包含特定目录字符串的子目录中python文件的路径

批处理文件循环-如果文件名包含字符串,则跳过文件

搜索目录和子目录中包含特定字符串的所有文件并删除字符串

处理包含文件路径的字符串以仅获取文件名

查找不包含指定字符串的文件名

如何获取文件名列表及其包含特定搜索字符串的句子?

搜索包含文件名的字符串

标识在特定文件中不包含特定字符串的子目录

用子目录和当前目录中的字符串替换文件名的一部分

不包含子目录的untar文件

查找包含字符串的文件名的函数

Hadoop-搜索特定字符串,然后返回包含字符串的文件名

递归“查找”文件名,该文件名包含另一个目录中的字符串和符号链接文件

从目录和所有子目录获取所有文件,但不包含一个子目录

如何从目录(包括其子目录)中获取其文件名包含特定字符串的所有文件的列表

文件名包含空格时,搜索并替换目录中所有.php文件中的登录字符串

检查文件名中是否包含字符串

在名称中包含子字符串的目录中获取文件名数组

如何检查文件夹中文件名中的元素是否包含字符串数组列表中的字符串名称?

如何在字符串末尾包含文件名

在包含同一行字符串的工作目录(及其子目录)中搜索文件

GNU Make:如果字符串包含“dirToExclude”,则从带有子目录的数组中删除字符串

递归遍历目录并返回包含 Python 中的子目录和文件的嵌套列表

尝试使用 GNU find 递归搜索仅在文件名的任何部分包含字符串的文件名(不是目录)