在所有目录中查找 zip 文件但排除某些文件夹

在所有目录中查找 zip 文件但排除某些文件夹

我想查看/home服务器目录中的所有 zip 文件以及所有用户文件夹,但我想排除客户端目录中可能存在或不存在的'.composer/' 和文件夹'vendor/'

我首先:

find . -iname \*.zip -prune -o -path "./composer*/*" 

但没有像我预期的那样工作

返回前:

./pescador/.composer/cache/files/mpdf/mpdf/30bed8bf2e5584fafe3dd19a2fb7d17e522e7402.zip
./pescador/.composer/cache/files/mpdf/mpdf/04966b62554c455cb7639829734133fbc0ad3228.zip

但我不能排除所有点目录,因为我也想在 .trash 上搜索

答案1

find . -path './composer*' -prune -o -iname '*.zip' -print

尽管这不会列出./composer-foo.ZIP例如。

为此,你可以这么说:

find . '(' ! -path './composer*' -o -prune ')' -iname '*.zip'

-prune告诉find不要下降到一个目录,所以你想将其应用到你想要编写脚本的目录。以及-print您想要列出的文件(请注意,如果没有指定操作谓词(并且-prune不是动作谓词),-print为匹配整个表达式的文件添加隐式动作)。

但在这里,您似乎想要跳过.composer无论在哪里都被调用的目录,而不是名称以 开头的当前工作目录的直接子目录composer,所以那就是:

find . -name .composer -prune -o -iname '*.zip' -print

或者也跳过名为的目录vendor

find . '(' -name .composer -o -name vendor ')' -prune \
       -o -iname '*.zip' -print

答案2

您可以使用 grep 的 -v 标志来排除不需要的结果:

# find /home -iname *.zip|grep -v "./composer"|grep -v "vendor/"

相关内容