Bash 自动压缩不同子文件夹并将压缩文件存储到具有日期名称的特殊文件夹中的脚本

Bash script to automatically zip different subfolders and store the zipped files into a special folder with dated names

我的目录结构是这样的:

\myproject\
     src\
     include\
     zipdir\
     .vscode\
     auto7zip.bat
     

我想存档 .vscode\ 子文件夹中的特定文件,而不是整个文件夹。

在 windows,auto7zip.bat 文件具有以下内容:

@ECHO OFF
SETLOCAL EnableExtensions EnableDelayedExpansion

Set TODAY=%date%
ECHO %TODAY%
    
set path="c:\Program Files-Zip";%path%
set projectdir=%CD%
set "zipdirsrc=%projectdir%\src"
set "zipdirinc=%projectdir%\include"
set "zipdirothers=%projectdir%\.vscode"
set "movedir=%projectdir%\zipdir"

pushd %zipdirsrc%
ECHO Zipping all contents of %zipdirsrc% and moving archive src to %movedir%
7z a -tzip "%movedir%\src_%TODAY%.zip" -r "%zipdirsrc%\*.*" -mx5
ECHO SRC Task Complete ...

pushd %zipdirinc%
ECHO Zipping all contents of %zipdirinc% and moving archive include to %movedir%
7z a -tzip "%movedir%\include_%TODAY%.zip" -r "%zipdirinc%\*.*" -mx5
ECHO INCLUDE Task Complete ...

pushd %zipdirothers%
ECHO Zipping all other contents of %zipdirothers% and moving archive others to %movedir%
7z a -tzip "%movedir%\others_%TODAY%.zip" -r "%zipdirothers%\*.json" "%zipdirothers%\Makefile" "%zipdirothers%\Makefile*.mk" "%zipdirothers%\windows.vcxproj" "%zipdirothers%\nbproject\" -mx5
ECHO OTHERS Task Complete ...

EXIT /B 0

这个批处理文件,如果 运行 今天(2021 年 7 月 2 日)在 windows 安装了 7zip 会创建 include_02-07-2021.zip,这是 [=17 的压缩版本=]、src_02-07-2021.zipsrc\ 的压缩版本,others_02-07-2021.zip.vscode\ 目录中特定文件的压缩版本。这些压缩文件在 zipdir\ 目录中自动创建。

是否有等效的 bash 脚本,当 \myproject\ 中的 运行 在 linux 发行版上完成相同的事情时,特别是 ubuntu

这应该可以满足您的需要。

#!/bin/bash

today=$(date +'%d-%m-%Y')
echo $today

movedir=../zipdir

function backup() {
    if [[ -n  ]]; then
        newname=""
    else
        newname=""
    fi
    cd ""
    [[ -z $custom ]] && custom="./*"
    echo "Zipping all contents of ./ and moving archive $newname to $movedir"
    zip "$movedir/${newname}_$today.zip" -r $custom  -9
    unset custom
    cd ..
}

unset custom

backup src
backup include
custom='./*.json ./Makefile ./Makefile*.mk ./windows.vcxproj ./nbproject/'
backup .vscode others

更新 1:

  • 删除了答案中不相关的部分
  • 更新脚本以通过更改为相关目录(因为请求已由 OP 澄清)从存档中排除根目录。