我今天早上才开始编写 bash 脚本,所以请原谅我的技能不够充分。
我有一个 GitHub 操作,其中我scp
将在推送事件中发生更改的文件发送到生产服务器。我尝试读取要忽略的文件名(不是 scp
将更改的文件名(从文件复制到服务器).txt
放入数组中,并将更改的文件名与数组中的文件名进行比较,使用正则表达式确定修改后的文件名是否以任何忽略文件名开头。
例如,如果我在忽略文本文件中有一行,内容是.github
,我希望更新所有已更改且路径以.github
NOT 开头的文件。
以下是我目前所掌握的信息:
readarray -d '\n' -t ignoreFiles < .github/doNotUpdate.txt
mapfile -d ',' -t added_modified_files < <(printf '%s,' '${{ steps.files.outputs.added_modified }}')
for added_modified_file in "${added_modified_files[@]}"; do
for ignore_start_path in $ignoreFiles; do
echo $ignore_start_path
if [[ ! $added_modified_file =~ "^${ignore_start_path}.*" ]]; then
echo "$added_modified_file was modified, uploading to production via SSH"
scp -i ./key.pem -o "StrictHostKeyChecking no" $added_modified_file [email protected]:/var/schedule/$added_modified_file
fi
done
done
问题是,我所进行的一系列循环将比较第一个$added_modified_file
和第一个$ignore_start_path
,如果它们不同,即使稍后$ignoreFiles
有一个条目与$added_modified_file, it will
scp` 文件匹配,也应该忽略该文件。我不知道如何解决这个问题。
主要问题:
我如何检查任何 $added_modified_file
$ignoreFile
从数组中的任意一个开始?
任何帮助大大感谢!