根据我的另一个问题,我有一个脚本可以快速轻松地更新drupal核心。
目前,它将站点文件夹移出目录,删除站点文件夹的内容,然后将站点文件夹移回
。mv ./sites ../sites
rm -rf *
cp -R /sources/drupal-7/* ./
mv ../sites ./sites
鉴于站点文件夹可能会变得相当大,我希望尽可能避免移动它,而只删除其他文件夹,只留下站点文件夹。
我在互联网上尝试了其他一些建议,其中一些来自这里,其中一个使用了find,但也删除了站点文件夹中的文件和文件夹。
我还想保持源文件夹完好无损,即:为新站点保留一个站点文件夹,并仅将复制的其他文件/文件夹移动到站点以进行更新,例如:
rm -rf * !sites/*
cp -R /sources/drupal-7/* ./ !sites/*
我尝试了许多方法,其中大多数根本不起作用或给出语法错误(或删除网站或其内容)
编辑:为清楚起见,这是完整的脚本:
#/bin/bash
CWD=$(pwd)
cd $CWD
echo $CWD
if [[ $CWD = "/var/www/vhosts/"* ]]; then
echo "Updating drupal core files"
read -r -p "do you need to keep the .htaccess file? [y/N]" response
if [ $response = y ]
then
/usr/local/bin/drush vset maintenance_mode 1
mv ./.htaccess ../.htaccess
mv ./sites ../sites
rm -rf *
cp -R /sources/drupal-7/* ./
cp -R /sources/drupal-7/.* ./
mv ../sites ./sites
mv ../.htaccess ./.htaccess
chown -R httpd:httpd *
/usr/local/bin/drush up && /usr/local/bin/drush updb
/usr/local/bin/drush cc all && /usr/local/bin/drush cron
/usr/local/bin/drush vset maintenance_mode 0
elif [ $response = n ]
then
/usr/local/bin/drush vset maintenance_mode 1
mv ./sites ../sites
rm -rf *
cp -R /sources/drupal-7/* ./
cp -R /sources/drupal-7/.* ./
mv ../sites ./sites
chown -R httpd:httpd *
/usr/local/bin/drush up && /usr/local/bin/drush updb
/usr/local/bin/drush cc all && /usr/local/bin/drush cron
/usr/local/bin/drush vset maintenance_mode 0
else
echo "Response must be either y or n"
fi
else
echo "not in a web directory, exiting"
fi
评论中的建议进行了更新:
find /path/to/dir -maxdepth 1 -mindepth 1 ! -name "sites" -type d -print0 | xargs -0 rm -rf
在 bash 中,您可以启用扩展 glob ( shopt -s extglob
),然后使用 !(sites)
:
bash-3.2$ shopt -s extglob
bash-3.2$ rm -r !(sites)
bash-3.2$ cp -R /sources/drupal-7/!(sites) .