下载并将 tarball 中目录的所有内容解压到现有目录中,以覆盖除一个或多个例外之外的所有内容

下载并将 tarball 中目录的所有内容解压到现有目录中,以覆盖除一个或多个例外之外的所有内容

我有一个 MediaWiki 1.32.0 网站,我想升级它,托管在 CentOS“共享服务器”环境上。
这是一个全核心网站,没有添加扩展、皮肤和图像(除了徽标)

要升级,我需要通过常规覆盖操作将网站目录中的所有文件更改为较新版本的 MediaWiki 安装目录中的文件(可在 tartball 中使用)。

要下载包含此类目录的最新 MediaWiki tarball(截至 2019 年 8 月 13 日),可以执行:

wget https://releases.wikimedia.org/mediawiki/1.33/mediawiki-1.33.0.tar.gz

在我现有的网站目录中,有这些我已经编辑过的文件,不应覆盖:

  1. LocalSettings.php
  2. robots.txt
  3. .htaccess
  4. example.com.png(形象标识)
  5. googlec69e044fede13fdc.html(谷歌搜索控制台验证文件)

如何从 tarball 中的目录中下载并提取所有文件以覆盖我当前的 MediaWiki 目录以覆盖除列出的例外之外的所有文件(例如上面列出的文件)?
我确实计划在手动更改之前备份旧目录,作为脚本的启动部分;添加一个仅在备份完成后继续的条件可能是一个好主意;所有这一切,除了每日自动备份之外)。

答案1

提取问题中的 tarball 将创建mediawiki-1.33.0包含以下子目录的目录:

$ tree -dL 1 mediawiki-1.33.0
mediawiki-1.33.0
├── cache
├── docs
├── extensions
├── images
├── includes
├── languages
├── maintenance
├── mw-config
├── resources
├── skins
├── tests
└── vendor

12 directories

假设这些也是您在正确的 mediawiki 安装中所需的目录,您需要做的就是:

  1. 备份您想要保留的文件,用于-p保持权限、所有权和时间戳不变。

    cp -p LocalSettings.php robots.txt .htaccess example.com.png googlec69e044fede13fdc.html /some/other/path
    
  2. 提取压缩包

    tar xvzf mediawiki-1.33.0.tar.gz
    
  3. 将文件复制到它们应该在的位置

    cp -a mediawiki-1.33.0/* /path/to/mediawiki/instrallation
    

    这将覆盖任何现有文件。

  4. 将备份复制回原来的位置

    cp -p /some/other/path/LocalSettings.php /original/path
    

答案2

1)创建一个文件exclude.me

LocalSettings.php
robots.txt
.htaccess
example.com.png
googlec69e044fede13fdc.htm

2) 提取存档

tar xvzf mediawiki-1.33.0.tar.gz --exclude-from=exclude.me --strip-components 1 -C /path/to/your/wiki

在建议中参见:

但如果这是一个包含重要数据的生产服务器,我仍然建议这样做特登描述。
也许只是将提取的存档符号链接到您的 mediawiki 所在的位置——老式的 unix 方式。

相关内容