gzip和git diff以及s3

gzip和git diff以及s3,git,bash,jenkins,Git,Bash,Jenkins,我需要获得自上次部署(git diff)以来已更改的文件列表,gzip这些文件,并将这些文件发送到S3。我需要得到所有的css文件和gzip文件,然后我需要得到所有的html文件,gzip文件,所有的JS文件和gzip文件。只有在自上次提交后发生更改的情况下 我可以很容易地从上次部署中获取提交哈希。我还有来自当前部署的提交散列 这是我的代码,它可以压缩所有css文件。我想修改这段代码,使之只对所有更改过的css文件进行gzip处理 find . -iname '*.css' -exec gzip

我需要获得自上次部署(git diff)以来已更改的文件列表,gzip这些文件,并将这些文件发送到S3。我需要得到所有的css文件和gzip文件,然后我需要得到所有的html文件,gzip文件,所有的JS文件和gzip文件。只有在自上次提交后发生更改的情况下

我可以很容易地从上次部署中获取提交哈希。我还有来自当前部署的提交散列

这是我的代码,它可以压缩所有css文件。我想修改这段代码,使之只对所有更改过的css文件进行gzip处理

find . -iname '*.css' -exec gzip -9 {} \; -exec mv {}.gz {} \;
aws s3 sync . s3://test --content-type "text/html" --cache-control "max-age=31536000" --exclude "*" --include "*.html"
下面是我必须对所有html文件进行aws同步的示例代码(我对css、js和html文件有单独的aws同步命令,因为我需要不同的内容类型、内容编码和缓存参数)。我想修改这段代码,使之只同步更改的html文件

find . -iname '*.css' -exec gzip -9 {} \; -exec mv {}.gz {} \;
aws s3 sync . s3://test --content-type "text/html" --cache-control "max-age=31536000" --exclude "*" --include "*.html"
如何将此代码绑定到git diff?是否仅对已更改的文件进行gzip?并且只同步已更改的文件(git diff返回的文件列表中的文件)

另外,我想将git diff返回的一些文件复制到一个单独的目录中。例如,图像/文件夹中的所有文件都需要复制到StaticAssets/目录。如何获取已更改且位于“图像”文件夹中的文件列表,并将其复制到单独的文件夹中

我想用bash来做这件事

所以我知道我可以使用
git diff--name only
命令。我的问题是,如何在bash中使用该命令执行以下操作:

  • Gzip所有更改的css文件,Gzip所有更改的js文件,Gzip所有更改的html文件(请注意,css文件可能位于另一个目录中的目录中)。我需要检索父目录中的所有css文件。因此,如果父目录有文件夹test,并且该文件夹有另一个名为test1的文件夹和一个名为test.css的css文件,那么我需要能够gzip该css文件,即使它的2个目录已关闭
  • AWS同步所有更改的js文件,AWS分别同步所有更改的css文件
  • 将已更改的文件以及图像/文件夹中的文件复制到另一个目录中
Gzip所有更改的css文件,Gzip所有更改的js文件,Gzip所有更改的html文件

获取更改文件列表的基本方法是
git diff--name only

您可以筛选该列表,以仅获取带有
grep.CSS$”-
的CSS文件
-
表示从STDIN而不是文件中读取

您可以使用
xargs
传递该列表
gzip
,以将STDIN转换为参数列表。确保使用
gzip-k
避免删除原始文件

git diff --name-only <revision> | grep '.css$' - | xargs gzip -k
Gzip所有更改的css文件,Gzip所有更改的js文件,Gzip所有更改的html文件

获取更改文件列表的基本方法是
git diff--name only

您可以筛选该列表,以仅获取带有
grep.CSS$”-
的CSS文件
-
表示从STDIN而不是文件中读取

您可以使用
xargs
传递该列表
gzip
,以将STDIN转换为参数列表。确保使用
gzip-k
避免删除原始文件

git diff --name-only <revision> | grep '.css$' - | xargs gzip -k
jsfiles=()
cssfiles=()
htmlfiles=()
图像文件=()
#循环“git diff--name only-z”的输出以按文件操作。
而IFS=read-r-d“”文件| |[-n“$file”];做
#gzip在循环时将“.js”、“.css”和“.html”放置到位
#还将数组设置为以后“aws s3 sync”命令的有效参数(希望如此)。
中的大小写“$file”
*(J.js)
gzip“$file”&&mv“$file”{.gz,}&&jsfiles+=(-include“$file”)
;;
*.css)
gzip“$file”&&mv“$file”{.gz,}&&cssfiles+=(-包括“$file”)
;;
*.html)
gzip“$file”&&mv“$file”{.gz,}&&htmlfiles+=(-包括“$file”)
;;
图像/*)
图像文件+=(“$file”)
;;
以撒
完成
jsfiles=()
cssfiles=()
htmlfiles=()
图像文件=()
#循环“git diff--name only-z”的输出以按文件操作。
而IFS=read-r-d“”文件| |[-n“$file”];做
#gzip在循环时将“.js”、“.css”和“.html”放置到位
#还将数组设置为以后“aws s3 sync”命令的有效参数(希望如此)。
中的大小写“$file”
*(J.js)
gzip“$file”&&mv“$file”{.gz,}&&jsfiles+=(-include“$file”)
;;
*.css)
gzip“$file”&&mv“$file”{.gz,}&&cssfiles+=(-包括“$file”)
;;
*.html)
gzip“$file”&&mv“$file”{.gz,}&&htmlfiles+=(-包括“$file”)
;;
图像/*)
图像文件+=(“$file”)
;;
以撒

您是否有上次部署的标记或其他标记?您有已部署文件的副本吗?我有上次部署的git commit散列。您是在这里请求所需的
git diff
命令吗?您是否在询问如何将该输出连接到
gzip
s3sync
(或其他)上?你有任何代码来尝试这个吗?这是我的代码,Gzip文件可以找到-iname'*.css'-exec gzip-9{}\-exec mv{}.gz{}\;但是我想将此代码绑定到git diff,即
s3sync
命令不会同步任何
.css
文件(假设
--include
的工作方式与我的假设相同)。另外,
s3 sync
是否足够智能,在默认情况下仅同步更改的文件?您是否为上次部署设置了标记或其他标记?您有已部署文件的副本吗?我有上次部署的git commit散列。您是在这里请求所需的
git diff
命令吗?您是否在询问如何将该输出连接到
gzip
s3sync
(或其他什么