我想查看/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/"