Bash 脚本获取 rsync 传输的结果并将其压缩为原始目录中的一个目录

Bash 脚本获取 rsync 传输的结果并将其压缩为原始目录中的一个目录

好吧,我想这很奇怪。
我有一个小的 stage.sh 脚本,非常简单,有一堆命令:

if [ "$(whoami)" == 'David' ]; then
    rsync -a --delete-excluded --exclude-from=.rsyncrc $(pwd) ~/Sites/local-testing-0/modules/
    rsync -a --delete-excluded --exclude-from=.rsyncrc $(pwd) ~/Sites/local-testing-1/modules/
    rsync -a --delete-excluded --exclude-from=.rsyncrc $(pwd) ~/Sites/local-testing-7/modules/
    rsync -a --delete-excluded --exclude-from=.rsyncrc $(pwd) ~/Sites/local-testing-2/modules/
    echo "Checked out for David"
fi

根据当前登录用户的情况,还存在其他情况。请注意,源是当前目录(请参阅 $(pwd))。我想添加一个案例,它采用当前目录并创建一个压缩文件夹出来吧。通过压缩文件夹我的意思是不焦油炸弹,并且必须是 zip 格式。我想获取 rsync 传输的输出,因为它已经过滤了东西。我尝试使用命名管道。我还可以.rsyncrc在 tar/zip 压缩过程中使用该文件进行排除。它是这样写的:

# Meta
- stage.sh
- .rsyncrc

# Repo itself
- .git
- .gitignore

# Distribution Packages
- dist/

# Other files
- */.DS_Store

因此,如果我可以在压缩过程中使用该文件进行排除,那就太好了。我没有真正测试过这一点,但我不确定这是否可能。输出应放置在 ./dist/ 中,该目录被排除在 rsync/zipping 过程之外。

奖励积分如果输出 zip 文件名的名称具有版本号 - 后缀,取自与文件夹同名并附加“.php”的文件内部。带有版本号的行总是这样的:$this->version = '0.0.1';

答案1

我想出了这个build.sh脚本:

foldername=$(dirname $(pwd))
projname=$(basename $(pwd))
rsync -a --exclude-from=.rsyncrc $(pwd) $TMPDIR
cd $TMPDIR
zip -rq $foldername/$projname/dist/$projname-latest.zip $projname
cd $foldername/$projname

它驻留在根文件夹中,因此每当我想将整个项目打包为 zip 时,我都会运行它source build.sh,然后就可以在我的距离/文件夹为项目名-最新.zip

相关内容