Vamos primeiro desmontar o seu comando:
find /var/www/html/* -type d -name 'phpmyadmin' -maxdepth 0 ! -exec cd * && wp plugin update --all {} \;
O que isso realmente vai fazer é:
- O shell vai expandir
/var/www/html/*
. Vamos supor que se expande para/var/www/html/foo
e/var/www/html/bar
. - O shell vai expandir
*
(o seucd *
). Note que este é o diretório de trabalho atual. Vamos supor que você tenhapop
etart
. - O shell executará
find /var/www/html/foo /var/www/html/bar -type d -name phpmyadmin -maxdepth 0 ! -exec cd pop tart
. -
find
lançará um erro sobre um comando não finalizado porque viu-exec
, mas não;
ou+
.
Então, para ficar claro o que está acontecendo, o shell está quebrando a linha, e passando apenas parte do que você queria ser um argumento para find
.
A maneira mais clara e simples de fazer isso com find
é:
find /var/www/html/* -type d -name phpmyadmin -maxdepth 0 -exec sh -c 'cd "$1" && wp plugin update --all' -- {} \;
Isto cita o comando inteiro, alimenta-o para sh
e, em seguida, passa o diretório como um argumento.
Além disso, esse é o gosto pessoal, mas para coisas como essa, eu diria que é mais fácil não usar find
:
for dir in /var/www/html/*/; do cd "$dir" && wp plugin update --all; done