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.zip
是 src\
的压缩版本,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 澄清)从存档中排除根目录。
我的目录结构是这样的:
\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.zip
是 src\
的压缩版本,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 澄清)从存档中排除根目录。