删除除指定文件夹及其内容之外的文件夹内容

  • 本文关键字:文件夹 删除 linux bash cp mv rm
  • 更新时间 :
  • 英文 :


根据我的另一个问题,我有一个脚本可以快速轻松地更新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) .

相关内容

  • 没有找到相关文章

最新更新