Хорошо, у меня была та же проблема, и это решило ее:
После этого eth0 появился безупречно, aiccu и radvd теперь работают правильно :)
Давайте сначала разберем вашу команду:
find /var/www/html/* -type d -name 'phpmyadmin' -maxdepth 0 ! -exec cd * && wp plugin update --all {} \;
На самом деле это будет:
/ var / www / html / *
. Предположим, он расширяется до / var / www / html / foo
и / var / www / html / bar
. *
(та, что на вашем компакт-диске *
). Обратите внимание, что это текущий рабочий каталог. Предположим, у вас есть поп
и пирог
. find / var / www / html / foo / var / www / html / bar -type d -name phpmyadmin -maxdepth 0! -exec cd pop tart
. find
выдаст ошибку о незавершенной команде, потому что она увидела -exec
, но не увидела ;
или +
. Чтобы было понятно, что происходит, оболочка разбивает строку и передает только часть того, что вы хотели аргументом для find
.
Самый чистый и простой способ сделать это с помощью find
:
find /var/www/html/* -type d -name phpmyadmin -maxdepth 0 -exec sh -c 'cd "$1" && wp plugin update --all' -- {} \;
Эта команда цитирует всю команду, передает ее в sh
, а затем передает каталог в качестве аргумента. .
Это тоже личный вкус, но для подобных вещей я бы сказал, что проще не использовать find
:
for dir in /var/www/html/*/; do cd "$dir" && wp plugin update --all; done
Давайте создадим сценарий оболочки tmp.sh
, который перейдет по cd в ваш каталог и выполнит работу. Теперь cd в дочернем каталоге не влияет на родительский, поэтому после выхода скрипта вы вернетесь в вызывающий каталог
#!/bin/sh
cd "$1"
wp plugin update --all
и тогда
type d -name 'phpmyadmin' -maxdepth 0 ! -exec ./tmp.sh '{}' \;
Другой способ - использовать небольшой цикл for. Вы можете сделать это в одной строке с
for folder in */; do <your-commands-on-$folder>; done
Используя ваш пример, который может быть
for folder in /var/www/html/*/phpmyadmin/; do cd "$folder"; wp plugin update --all; done