【发布时间】:2011-04-01 12:05:54
【问题描述】:
我们如何找到特定类型的文件,即嵌套目录中存在的 doc pdf 文件。
我试过的命令:
$ ls -R | grep .doc
但如果有像alok.doc.txt 这样的文件名,该命令也会显示该文件名,这显然不是我想要的。我应该改用什么命令?
【问题讨论】:
标签: linux unix shell command-line command
我们如何找到特定类型的文件,即嵌套目录中存在的 doc pdf 文件。
我试过的命令:
$ ls -R | grep .doc
但如果有像alok.doc.txt 这样的文件名,该命令也会显示该文件名,这显然不是我想要的。我应该改用什么命令?
【问题讨论】:
标签: linux unix shell command-line command
如果您的文件扩展名与文件类型不匹配,您可以使用file 实用程序。
find $PWD -type f -exec file -N \{\} \; | grep "PDF document" | awk -F: '{print $1}'
您可以使用要开始搜索的目录来代替$PWD。file 甚至打印出 PDF 版本。
【讨论】:
我们有一个类似的问题。我们想要一个包含路径的列表,包含 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"
希望你觉得它有用。
席德
【讨论】:
find . | grep "\.doc$"
这也会显示路径。
【讨论】:
如果您更习惯使用“ls”和“grep”,您可以在 grep 命令中使用正则表达式来做您想做的事情(结尾的 '$' 字符表示 .doc 必须位于行尾. 那将排除“file.doc.txt”):
ls -R |grep "\.doc$"
更多关于在the man中使用grep和正则表达式的信息。
【讨论】:
hellodoc 这样的文件也会匹配。 ls -R | grep "\.doc$"
ls找到的文件的完整路径?现在我只是一个所有文件的列表,但我现在不知道如何真正找到它们。
ls作为输入数据
同样,如果您更喜欢使用通配符 *(不太像正则表达式建议),您可以使用 ls 和 -l 标志来每行列出一个文件(如 grep)和 @987654324 @标志就像你一样。然后您可以使用*.doc 指定要搜索的文件
IE。要么
ls -l -R *.doc
或者如果您希望它以更少的行列出文件。
ls -R *.doc
【讨论】:
其他一些可以使用的方法:
echo *.{pdf,docx,jpeg}
stat -c %n * | grep 'pdf\|docx\|jpeg'
【讨论】:
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
【讨论】:
ls **/*.{pdf,doc}或for file in **/*.{pdf,doc}