我们如何找到特定类型的文件,即嵌套目录中存在的doc pdf文件。
命令我试过了:
$ ls -R | grep .doc
但是如果有一个像alok.doc.txt
这样的文件名,那么命令也会显示,这显然不是我想要的。我应该使用什么命令呢?
答案 0 :(得分:60)
如果您对“ls”和“grep”更加舒适,可以使用grep命令中的正则表达式执行您想要的操作(结尾的'$'字符表示.doc必须位于行的末尾那将排除“file.doc.txt”):
ls -R |grep "\.doc$"
有关在the man中使用grep和正则表达式的更多信息。
答案 1 :(得分:31)
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
答案 2 :(得分:3)
可以使用的其他一些方法:
echo *.{pdf,docx,jpeg}
stat -c %n * | grep 'pdf\|docx\|jpeg'
答案 3 :(得分:2)
find . | grep "\.doc$"
这也将显示路径。
答案 4 :(得分: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"
希望您发现它有用。
Sid
答案 5 :(得分:0)
同样,如果您更喜欢使用通配符*
(不像正则表达式建议),您可以使用ls
同时使用-l
标记每行列出一个文件(如grep)和你所拥有的-R
标志。然后,您可以使用*.doc
指定要搜索的文件
I.E.任
ls -l -R *.doc
或者如果您希望它以较少的行列出文件。
ls -R *.doc
答案 6 :(得分:0)
如果文件的扩展名与文件类型不匹配,则可以使用file
实用程序。
find $PWD -type f -exec file -N \{\} \; | grep "PDF document" | awk -F: '{print $1}'
您可以使用要开始搜索的目录来代替$PWD
。file
甚至可以打印出PDF版本。