根据我的另一个问题,我有一个脚本可以快速轻松地更新drupal核心。
目前,它将sites文件夹移出目录,删除站点文件夹的内容,然后将sites文件夹移回。
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
答案 0 :(得分:3)
根据评论中的建议进行了更新:
find /path/to/dir -maxdepth 1 -mindepth 1 ! -name "sites" -type d -print0 | xargs -0 rm -rf
答案 1 :(得分:2)
在bash中,您可以启用扩展的全局(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) .