在多个文件夹名称中查找文件

在多个文件夹名称中查找文件

我试图列出来自dir1dir2、的所有文件dir3,这些文件可能位于我使用该命令dir4的子目录中的任何位置。我尝试了以下方法但没有成功:cwdfind

find . -type f -regextype posix-egrep -regex 'dir1/.+|dir2/.+|dir3/.+|dir4/.+'

posix-extended也尝试过。我怎样才能列出这些文件?

答案1

如果您想搜索名为foobar、 和baz的三个文件夹中的所有*.py文件,请使用以下命令:

find foo bar baz -name "*.py"

所以如果你想显示dir1 dir2 dir3使用过的文件find dir1 dir2 dir3 -type f

尝试这个find . \( -name "dir1" -o -name "dir2" \) -exec ls '{}' \;

答案2

最好使用 -path 指令:

find .  \( -type f -and -path '*/dir1/*' -or -path '*/dir2/*' -or -path '*/dir3/*' -or -path '*/dir4/*' \)

这意味着:查找当前目录下路径中存在“dir1”或“dir2”或“dir3”或“dir4”的所有文件。

答案3

只是为了让大家知道。.*/在每个之前添加dir解决了问题,因为regex看起来与完整路径匹配。

答案4

快速(!)在通配符(主目录)和通用 apache2 日志目录定义的多个位置中查找特定文件(access_log)的示例,还应用名称过滤来排除 ssl 日志和 gzip 压缩的旧日志。此处不直接回答问题,但可能对找到这些说明的人(例如我)有用。

find / \( -path "*var/log/apache2*" -o -path "*home/*/logs*" \) -type f  -name "*access_log" ! -name "*ssl*"

请小心空格,特别是靠近\(和 的空格\)

顺便说一句,我将它用于 apachetop,以查找我的服务器中最活跃的网站。

apachetop -d1 -s9 -p $(find / \( -path "*var/log/apache2*" -o -path "*home/*/logs*" \) -type f  -name "*access_log" ! -name "*ssl*" -print | sed 's/^/-f '/)

相关内容