在 bash 中包含和排除 globbing 模式

Including and excluding globbing patterns in bash

我正在尝试使用 PHPCompatibility standard for PHP CodeSniffer 来测试一组特定的文件。

我目前正在使用 find 来执行此操作。

find ./path1 ./path2 ./path3 ./path4                                                \
    -type f                                                                         \
    -name '*.php'                                                                   \
    -not -path './path4/dontwantthis/*'                                             \
    -exec ./vendor/bin/phpcs                                                        \
    --standard=PHPCompatibility --runtime-set testVersion 5.6 {}                    \;

但是,这确实很慢且效率低下,因为脚本的启动会针对每个文件运行。

phpcs 脚本采用类似 ./vendor/bin/phpcs --standard=PHPCompatibility --runtime-set testVersion 5.6 <path-of-your-php-files> 的路径,我想找到一种方法来复制 find 的东西,用通配模式代替 <path-of-your-php-files>

我遇到的主要问题之一是包括 ./path4/*.php 同时还排除了 ./path4/dontwantthis/*

+ 而不是 \; 结束你的 -exec 选项。这告诉 find 到 运行 命令一次包含所有文件名,而不是分别针对每个文件名。

find ./path1 ./path2 ./path3 ./path4                                                \
    -type f                                                                         \
    -name '*.php'                                                                   \
    -not -path './path4/dontwantthis/*'                                             \
    -exec ./vendor/bin/phpcs                                                        \
    --standard=PHPCompatibility --runtime-set testVersion 5.6 {} +