如何在shell的递归目录中列出特定类型的文件?

Posted

技术标签:

【中文标题】如何在shell的递归目录中列出特定类型的文件?【英文标题】:How to list specific type of files in recursive directories in shell? 【发布时间】:2011-04-01 12:05:54 【问题描述】:

我们如何找到特定类型的文件,即嵌套目录中存在的 doc pdf 文件。

我试过的命令:

$ ls -R | grep .doc

但如果有像alok.doc.txt 这样的文件名,该命令也会显示该文件名,这显然不是我想要的。我应该改用什么命令?

【问题讨论】:

【参考方案1】:

如果您的文件扩展名与文件类型不匹配,您可以使用file 实用程序。

find $PWD -type f -exec file -N \\ \; | grep "PDF document" | awk -F: 'print $1'

您可以使用要开始搜索的目录来代替$PWDfile 甚至打印出 PDF 版本。

【讨论】:

【参考方案2】:

我们有一个类似的问题。我们想要一个包含路径的列表,包含 etc 目录中的所有配置文件。这有效:

find /etc -type f \( -iname "*.conf" \)

它提供了所有 .conf 文件及其路径的漂亮列表。输出如下:

/etc/conf/server.conf

但是,我们想对所有这些文件做一些事情,比如 grep 这些文件以在所有文件中查找单词或设置。所以我们使用

find /etc -type f \( -iname "*.conf" \) -print0 | xargs -0 grep -Hi "ServerName"

通过 grep 查找 /etc 中包含“ServerName”等设置的所有配置文件输出如下所示:

/etc/conf/server.conf: ServerName "default-118_11_170_172"

希望你觉得它有用。

席德

【讨论】:

【参考方案3】:
find . | grep "\.doc$"

这也会显示路径。

【讨论】:

【参考方案4】:

如果您更习惯使用“ls”和“grep”,您可以在 grep 命令中使用正则表达式来做您想做的事情(结尾的 '$' 字符表示 .doc 必须位于行尾. 那将排除“file.doc.txt”):

ls -R |grep "\.doc$"

更多关于在the man中使用grep和正则表达式的信息。

【讨论】:

转义点可能很好,否则像hellodoc 这样的文件也会匹配。 ls -R | grep "\.doc$" 有没有办法让你看到ls找到的文件的完整路径?现在我只是一个所有文件的列表,但我现在不知道如何真正找到它们。 永远不要在脚本中使用ls作为输入数据【参考方案5】:

同样,如果您更喜欢使用通配符 *(不太像正则表达式建议),您可以使用 ls-l 标志来每行列出一个文件(如 grep)和 @987654324 @标志就像你一样。然后您可以使用*.doc 指定要搜索的文件 IE。要么

ls -l -R *.doc

或者如果您希望它以更少的行列出文件。

ls -R *.doc

【讨论】:

你试过运行这个吗? mkdir tmp;光盘时间; mkdir a;触摸 a/a.doc; ls -l -R *.doc ls: 无法访问 '*.doc': 没有这样的文件或目录【参考方案6】:

其他一些可以使用的方法:

echo *.pdf,docx,jpeg

stat -c %n * | grep 'pdf\|docx\|jpeg'

【讨论】:

【参考方案7】:

ls 命令输出主要供人类阅读。对于自动处理的高级查询,您应该使用更强大的find 命令:

find /path -type f \( -iname "*.doc" -o -iname "*.pdf" \) 

好像你有 bash 4.0++

#!/bin/bash
shopt -s globstar
shopt -s nullglob
for file in **/*.pdf,doc
do
  echo "$file"
done

【讨论】:

它是 */.pdf */.doc - 如果没有它,您就不会递归到子目录 你可以做ls **/*.pdf,docfor file in **/*.pdf,doc 哇,我输入了三个星号,它用一个替换了它 - 将来会知道的。

以上是关于如何在shell的递归目录中列出特定类型的文件?的主要内容,如果未能解决你的问题,请参考以下文章

在网站文件系统中列出特定文件类型的Shell脚本

如何在Go中递归列出带有频道的文件?

在Databricks(DBFS)中递归列出目录和子目录的文件

Android如何遍历特定目录下所有文件

linux如何查找以某个字母打头的文件或文件夹 比如,/etc目录下很多文件,我想列出所有以c开头的文件或文件

如何在 Visual Studio Code 中列出/搜索特定类型的所有文件