Shell скрипт для обновления WordPress блогов
Как программист, я люблю оптимизировать все процессы в своей жизни. Недавно меня таки достало вручную обновлять блоги на движке Wordpress и взялся за написание простенького скрипта который должен был это делать вместо меня.
Но поскольку в Linux Shell я только начал активно пользовать этот простенький скрипт оказалось написать не так-то просто. На днях WordPress обновился до версии 2.7, но на этот раз я уже готов.
Собственно сам скрипт:
#!/bin/bash cd /home/tmp wget http://wordpress.org/latest.tar.gz downfile=`ls ./*.tar.gz` tar xzf $downfile rm -rf ./wordpress/wp-content rm -f ./wordpress/wp-config-sample.php for line in `cat blogs.txt`; do #variant #1#OWNER=`expr $line : '/home/\(.*\)/domains/.*'` #echo $line $OWNER echo "---------------------------------------" echo "Start updagin wordpress: $line" #variant #2: owner=`stat -c %U $line` chown -Rf $owner:$owner ./wordpress/* find $line* -maxdepth 0 ! -name cgi-bin ! -name images ! -name wp-content ! -name .htaccess ! -name favicon.ico ! -name robots.txt ! -name wp-config.php -exec rm -rf {} \; cp -pRf ./wordpress/* $line echo "finished!" done rm -rf ./wordpress rm -rf ./$downfile;
А сейчас более подробно:
Заруливаем в какую-то папку для удобства
cd /home/tmp
Качаем последнюю версию wordpress
wget http://wordpress.org/latest.tar.gz
Поскольку оно его сохраняет с другим именем аля wordpress-2.7.tar.gz, то получаем это имя и записываем его в переменную downfile. Хотя, наверное проще было бы в wget указать в какой файл сохранять, но у меня что-то не получалось.
downfile=`ls ./*.tar.gz`
Распаковываем архив
tar xzf $downfile
Удаляем файлы и папки, которые не надо обновлять
rm -rf ./wordpress/wp-content rm -f ./wordpress/wp-config-sample.php
Дальше идет цикл, который читает построчно файл blogs.txt
for line in `cat blogs.txt`; do
Еще нужно установить владельца и группу на новые файлы. Сначала я хотел делать это так (т.е. тупо отпарсить имя юзера со строки):
#OWNER=`expr $line : '/home/\(.*\)/domains/.*'` echo "---------------------------------------" echo "Start updagin wordpress: $line"
Но я точно знал, что в Линуксе должна быть какая-то команда, которая покажет мне только имя владельца, и после того, как я перерыл 3 или 4 книги я таки нашел её:
owner=`stat -c %U $line`
Собственно устанавливаем права на все файлы, которые разархивировали
chown -Rf $owner:$owner ./wordpress/*
Дальше удаляем старый движок кроме того что нам нужно это указываем в параметрах ! -name MYFILE
Можно было сразу скопировать заменив старые файлы, но мне так кажется более надежно. Это все должно идти в одну строчку просто в посте не получается так.
find $line* -maxdepth 0 ! -name cgi-bin ! -name images ! -name wp-content
! -name .htaccess ! -name favicon.ico ! -name robots.txt ! -name wp-config.php
-exec rm -rf {} \;
и копируем новые
cp -pRf ./wordpress/* $line
Выводим сообщение – финита ля комедия
echo "finished!"
Конец цикла
done
Удаляем то, что качали вначале, оно уже не нужно
rm -rf ./wordpress rm -rf ./$downfile;
Кроме того в цикл надо бы еще добавить строчку аля:
wget http://domain.com/wp-admin/upgrade.php?step=1&backto=
Но тогда оно еще насохраняет файлов, которые нужно поудалять. Знаю что теоретически должно работать как-то так wget http://domain.com > /dev/null или вот так wget -O /dev/null “http://www.”$line”/wp-admin/upgrade.php?step=1&backto=” 2> /dev/null но оно не работает. =( Линуксоиды, выручайте