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

Kum*_*lok 37 unix linux shell command-line command

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

命令我试过:

$ ls -R | grep .doc
Run Code Online (Sandbox Code Playgroud)

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

Ben*_*ine 64

如果你对"ls"和"grep"更加舒适,你可以使用grep命令中的正则表达式做你想做的事情(结尾的'$'字符表示.doc必须在行尾.这将是排除"file.doc.txt"):

ls -R |grep "\.doc$"
Run Code Online (Sandbox Code Playgroud)

有关在man中使用带正则表达式的grep的更多信息.

  • +1,每天学习一些关于linux的新知识. (4认同)
  • 有没有办法让这个显示"ls"找到的文件的完整路径?现在我只是所有文件的列表,但我不知道如何实际找到它们. (4认同)

gho*_*g74 32

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

find /path -type f \( -iname "*.doc" -o -iname "*.pdf" \) 
Run Code Online (Sandbox Code Playgroud)

好像你有bash 4.0 ++

#!/bin/bash
shopt -s globstar
shopt -s nullglob
for file in **/*.{pdf,doc}
do
  echo "$file"
done
Run Code Online (Sandbox Code Playgroud)

  • 您可以执行`ls**/*.{pdf,doc}`或`for file in**/*.{pdf,doc} (9认同)

小智 8

find . | grep "\.doc$"
Run Code Online (Sandbox Code Playgroud)

这也将显示路径。