在验证此脚本中的文件存在时,我遇到了问题。当添加路径或删除路径中没有文件时,脚本将失败。
如何验证添加或删除路径中是否存在文件?
我正在使用bash和Makefile做我的第一步,所以任何帮助都将受到感谢。
execute-s3-sync: $(foreach BUCKET,$(S3_BUCKETS),execute-$(BUCKET)-s3-sync) execute-large-files-s3-sync
execute-%-s3-sync: require-target-environment property-SOURCE_DATA_EXPORT_KEY property-TARGET_DATA_EXPORT_KEY
export AWS_DEFAULT_REGION=$(TARGET_AWS_REGION)
MANIFEST="$(if $(filter $*,large-files),large-files,$(call get-source-s3-bucket,$*)).gz"
ADDITION="target/migrations/$(TARGET_DATA_EXPORT_KEY)/diff/$(SOURCE_DATA_EXPORT_KEY)/additions/$$MANIFEST"
DELETION="target/migrations/$(TARGET_DATA_EXPORT_KEY)/diff/$(SOURCE_DATA_EXPORT_KEY)/deletions/$$MANIFEST"
[[ -f "$$ADDITION" ]] && \
pipenv run python scripts/large-files-copy.py \
$(foreach BUCKET,$(S3_BUCKETS),--bucket-equivalences $(call get-source-s3-bucket,$(BUCKET)) $(call get-target-s3-bucket,$*)) \
--manifest $$ADDITION \
submit-to-batch \
--job-queue "$(STACK_PREFIX)-batch-job-queue" \
--job-definition "$(STACK_PREFIX)-batch-job-definition"
[[ -f "$$DELETION" ]] && \
pipenv run python scripts/large-files-copy.py \
$(foreach BUCKET,$(S3_BUCKETS),--bucket-equivalences $(call get-source-s3-bucket,$(BUCKET)) $(call get-target-s3-bucket,$*)) \
--manifest $$DELETION \
local-run \
--operation remove;发布于 2020-09-08 14:59:31
您必须使它成为一个庞大的单一bash命令;make在shell中分别执行每一行,而变量在后面的步骤中不可用。为了提高可读性/可维护性,我将这里的test -f ... && xxx语句替换为if块。
例如。
execute-%-s3-sync: ...
MANIFEST="$(if $(filter $*,large-files),large-files,$(call get-source-s3-bucket,$*)).gz" && \
ADDITION="target/migrations/$(TARGET_DATA_EXPORT_KEY)/diff/$(SOURCE_DATA_EXPORT_KEY)/additions/$$MANIFEST" && \
DELETION="target/migrations/$(TARGET_DATA_EXPORT_KEY)/diff/$(SOURCE_DATA_EXPORT_KEY)/deletions/$$MANIFEST" && \
if test -f "$$ADDITION"; then \
...
fi && \
if test -f "$$DELETION"; then \
...对于失败,你必须以积极的态度来表达。例如。
测试-f $FILE && do_something ## ->将在$FILE不存在时失败
好了!仅当-f $FILE do_something ## ->只在do_something失败时才会失败
如果测试-f $FILE;那么do_something fi
https://stackoverflow.com/questions/63796135
复制相似问题