ZIP 命令行中有什么不正确的地方?

Zed*_*Zip 2 command-line zip

我正在开发 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.
Run Code Online (Sandbox Code Playgroud)

它是在 Ubuntu 最新环境中。

这里有什么不正确的地方?

Raf*_*ffa 6

你似乎想要:

zip -jr customerlambda-356e9e4b8869b2cf7f483d739aa5a8aa34e0fc13.zip \
./bin/Release/net6.0/publish/
Run Code Online (Sandbox Code Playgroud)

没有 -i...使用-iinclude)选项,您仍然没有指定源文件/目录的路径,因此出现错误:

zip error: Invalid command arguments (nothing to select from)
Run Code Online (Sandbox Code Playgroud)

注意事项一:

./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)
Run Code Online (Sandbox Code Playgroud)

因此,您可能不想-j在这种情况下使用。

注意事项三:

./subdir/subdir2/虽然和形式的相对路径archive.zip将相对于当前工作目录进行工作和解析,但在脚本文件中对输出存档和源目录/文件使用完整的真实路径可能是一个好主意)例如,如果您的源目录是:

/home/runner/work/PM2AWSCustomers/PM2AWSCustomers/bin/Release/net6.0/publish/
Run Code Online (Sandbox Code Playgroud)

并且您希望将生成的存档文件命名customerlambda.zip并保存在:

/home/runner/work/PM2AWSCustomers/
Run Code Online (Sandbox Code Playgroud)

然后使用zip如下命令:

zip -r /home/runner/work/PM2AWSCustomers/customerlambda.zip \
/home/runner/work/PM2AWSCustomers/PM2AWSCustomers/bin/Release/net6.0/publish/
Run Code Online (Sandbox Code Playgroud)

反斜杠\用于转义本文中用于可重复性目的的换行符,并使 shell 将命令作为一个行读取,而忽略转义的换行符。