我正在开发 AWS Lambda (NET6)。在 CloudFormation yml 文件中执行 Github 操作(构建、压缩、上传)期间,我收到以下错误:
Run zip -jr customerlambda-356e9e4b8869b2cf7f483d739aa5a8aa34e0fc13.zip -i ./bin/Release/net6.0/publish/*
zip error: Invalid command arguments (nothing to select from)
Error: Process completed with exit code 16.
它处于 Ubuntu 最新环境中。
这哪里是错误的?
答案1
你似乎想要:
zip -jr customerlambda-356e9e4b8869b2cf7f483d739aa5a8aa34e0fc13.zip \
./bin/Release/net6.0/publish/
IE没有 -i
... 使用-i
(包括) 选项,您仍然没有指定源文件/目录的路径,因此出现错误:
zip error: Invalid command arguments (nothing to select from)
注意一条:
./bin/Release/net6.0/publish/
似乎是源文件/目录所在的相对路径,但-i
在它前面添加会将其变成选项的参数-i
而不是命令本身的参数zip
...因此就命令而言zip
,没有源文件/目录参数...并且,您不需要包含该目录的内容,因为-i
该-r
选项将递归遍历该目录的内容,所以您不需要使用*
(\*
使用时最好用反斜杠转义) 或者 ... 所以只需删除-i
并*
。
注意事项二:
该-j
选项将导致zip
仅存储已保存文件的名称,而不存储目录名称(即相对于当前目录的路径)... 这可能会在与选项一起使用时引起问题,-r
因为在由选项集递归的子目录中可能存在重复的相同文件名,-r
这将导致zip
接收重复的文件名并存储在存档中,而存档无法做到这一点,并将导致如下错误:
zip error: Invalid command arguments (cannot repeat names in zip file)
-j
因此,在这种情况下您可能不想使用。
注意三:
./subdir/subdir2/
虽然和形式的相对路径archive.zip
可以工作并相对于当前工作目录进行解析,但在脚本文件中对输出存档和源目录/文件都使用完整的真实路径可能是一个好主意,例如如果您的源目录是:
/home/runner/work/PM2AWSCustomers/PM2AWSCustomers/bin/Release/net6.0/publish/
并且您希望将生成的存档文件命名为customerlambda.zip
并保存在:
/home/runner/work/PM2AWSCustomers/
然后使用zip
如下命令:
zip -r /home/runner/work/PM2AWSCustomers/customerlambda.zip \
/home/runner/work/PM2AWSCustomers/PM2AWSCustomers/bin/Release/net6.0/publish/
反斜杠\
用于转义本文中用于可读性目的的换行符,并将使 shell 将命令读取为一行,而忽略转义的换行符。