find с exec: как выполнить многоступенчатое условное действие для каждого файла - PullRequest
0 голосов
/ 30 сентября 2011

У меня есть несколько файлов php в структуре каталогов, скажем / mylibs
Я хочу запустить простой php -l $file для каждого php-файла, который проверяет синтаксические ошибки

find /mylibs -type f -iname "*.php" -exec php -l {} &>/dev/null \;

это первый шаг, &> / dev / null съедает подробный вывод php (найдены синтаксические ошибки или нет)

php -l возвращает 0, если не найдено ошибок, в зависимости от которых, я хочу скопировать их в какой-нибудь другой каталог, скажем /mybin. Чтобы проверить, работает ли это должным образом, я попытался

find /mylibs -type f -iname "*.php" -ok php -l {} &>/dev/null ; echo $? \;

но это просто выводит 1 на терминал и не запрашивает подтверждения (-ok действует так же, как -exec после интерактивного подтверждения)

Что я здесь не так делаю? разве это невозможно сделать?

Ответы [ 2 ]

1 голос
/ 30 сентября 2011

Вы можете использовать петлю while :

find /mylibs -type f -iname "*.php" | while IFS= read -r path
do
    php -l "$path" &>/dev/null
    if [ $? -eq 0 ]
    then
        cp "$path" /mybin
    fi
done
0 голосов
/ 30 сентября 2011

это работает для тебя?

 find ....|xargs awk '{r=system("php -l "$0" &>/dev/null"); if(!r) system("cp "$0" /path/to/targetDir")}'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...