zip error: Invalid command arguments

本文介绍了一种常见的Android项目编译时遇到的错误——由于.svn文件夹被复制到输出目录导致的zip错误,并提供了详细的解决方案,包括修改makefile以排除.svn文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在编译使用svn管理的android代码时,会出现如下错误:

 

zip error: Invalid command arguments (cannot repeat names in zip file)
make: *** [out/target/product/xxxxx/system/etc/recovery-resource.dat] Error 16
make: *** Waiting for unfinished jobs....

 

原因是因为编译recovery的时候把.svn目录拷贝到了out目录下

./recovery/root/res/images/.svn
./recovery/root/res/.svn

网上提供的解决方法没有去试:

1、安装subversion1.7;

PS:服务器用的是visualSVN,有同事装了subversion1.7发现有问题,于是就没试。

2、删除所有目录下的.svn文件。

PS:这个都删除了,更新代码怎么办。

 

这里提供一个最简单的解决方案:

修改build/core/main.mk

$(shell build/tools/findleaves.py --prune=$(OUT_DIR) --prune=.repo --prune=.git --prune=.svn $(subdirs) Android.mk)

添加 --prune=.svn即可。

修改buid/core/Makefile

$(hide) cp -rf $(recovery_resources_common) $(TARGET_RECOVERY_ROOT_OUT)/
$(hide) rm -rf $(TARGET_RECOVERY_ROOT_OUT)/res/.svn $(TARGET_RECOVERY_ROOT_OUT)/res/images/.svn //添加这一行
$(hide) cp -f $(recovery_font) $(TARGET_RECOVERY_ROOT_OUT)/res/images/font.png


注意:要把out目录下的.svn文件夹删掉。

<think>我们正在处理用户在使用zip命令进行分卷压缩时遇到的参数错误问题。用户报告的错误信息是:“zip command split size error Unable to read number start with digit 0”。这个错误通常是由于在指定分卷大小时,数字以0开头(如010m)导致的。因为以0开头的数字会被解释为八进制数,而八进制数中不能出现8或9(如果指定了09m就会出错),或者数字格式不正确。 根据用户提供的引用[^1]中,正确的分卷压缩命令格式是: zip -r -s <size> <压缩包名称> <要压缩的目录或文件> 其中,<size>是每个分卷的大小,可以使用k(千字节)、m(兆字节)、g(千兆字节)等后缀。注意:数字部分不能以0开头(除非就是0,但0没有意义),并且不能包含非数字字符(除了后缀字母)。 例如: zip -r -s 100m archive.zip my_folder/ 但是,如果用户输入了类似以下的命令: zip -r -s 010m archive.zip my_folder/ 这里010m以0开头,zip命令会尝试将010解释为八进制数,而八进制数中每个数字位只能是0-7,所以010是合法的八进制数(等于十进制的8),但如果是08m或09m就会出错,因为8和9不是八进制数字。 然而,错误信息“Unable to read number start with digit 0”表明zip命令无法解析这个数字,这通常是因为数字部分包含了非数字字符(比如空格)或者以0开头且后面跟着非八进制数字(如8,9)或者数字格式错误。 解决方案: 1. 确保分卷大小的数字部分不以0开头(除非是0,但0没有意义,所以应该避免)。 2. 确保分卷大小的格式正确:数字+单位(单位可以是k、m、g、t等,不区分大小写)。 例如,将命令改为: zip -r -s 10m archive.zip my_folder/ 如果用户需要指定10m,就不要写成010m。 另外,根据引用[^1]中的示例,他们使用了: zip -r -s 1m log.zip log/ 所以,正确的做法是使用不带前导零的数字。 如果用户确实需要指定以0开头的数字(比如八进制),那么必须确保每一位都是0-7,并且知道这是八进制。但通常我们不建议这样做,因为容易出错。 因此,针对这个错误,我们建议用户检查分卷大小的数字部分,去掉前导零,并确保数字部分只包含十进制数字(0-9),然后加上后缀。 步骤总结: 1. 打开终端。 2. 使用正确的分卷大小格式重新运行zip命令,例如: zip -r -s 10m archive.zip folder_to_compress/ 3. 如果之前因为前导零导致错误,去掉前导零后应该可以正常运行。 如果用户需要更详细的帮助,可以查看zip命令的手册(man zip)或使用zip --help。 另外,如果用户需要创建分卷压缩文件,还可以使用其他方法,比如先压缩再分割(但这样需要两个步骤),但使用zip的-s参数是最直接的方法。 现在,我们按照用户要求生成相关问题。 注意:在回答中,我们引用了用户提供的引用[^1]中的内容,所以我们在回答末尾添加了引用标识[^1]。</think>### 解决 `zip` 分卷压缩参数错误:`Unable to read number start with digit 0` 在 Linux 中使用 `zip` 命令进行分卷压缩时,若出现 **`split size error: Unable to read number start with digit 0`** 错误,通常是由于分卷大小参数格式错误所致。以下是详细解决方案: --- ### 错误原因及修复方案 #### 📌 核心问题 分卷大小参数 `-s <size>` **不支持以 `0` 开头的数字**(如 `010m`)。这是因为: 1. 以 `0` 开头的数字会被解析为**八进制数** 2. 八进制数字中不能包含 `8` 或 `9`(如 `08m`, `09m` 会报错) 3. 参数格式必须为:`<数字><单位>`(如 `10m`),**不能有前导零** #### ✅ 正确命令格式 ```bash zip -r -s <size> <压缩包名称> <目标目录/文件> ``` - **`<size>` 规范**: - 使用十进制数字(**不以 `0` 开头**) - 单位后缀:`k` (KB), `m` (MB), `g` (GB), `t` (TB) - 示例: ```bash # ✅ 正确(无前导零) zip -r -s 100m photos.zip ~/Pictures # 每卷100MB zip -r -s 2g backup.zip /data # 每卷2GB # ❌ 错误(含前导零) zip -r -s 010m photos.zip ~/Pictures # 报错:Unable to read number... zip -r -s 08g backup.zip /data # 报错:Invalid octal digit '8' ``` #### 🔧 验证步骤 1. **检查分卷参数**: ```bash # 查看当前目录的分卷文件列表 ls -lh ``` 输出应类似: ``` -rw-r--r-- 1 user group 100M Jan 10 10:00 photos.z01 -rw-r--r-- 1 user group 100M Jan 10 10:01 photos.z02 -rw-r--r-- 1 user group 20M Jan 10 10:02 photos.zip ``` 2. **重新执行正确命令**: ```bash # 删除错误生成的分卷文件 rm photos.z* # 使用修正后的命令 zip -r -s 100m photos.zip ~/Pictures ``` --- ### 完整分卷压缩流程 #### 1. 创建分卷压缩包 ```bash # 压缩目录,每卷500MB zip -r -s 500m archive.zip /path/to/directory ``` 生成文件:`archive.z01`, `archive.z02`, ..., `archive.zip` #### 2. 解压分卷压缩包 ```bash # 合并分卷 zip -s 0 archive.zip --out full_archive.zip # 解压合并后的文件 unzip full_archive.zip ``` --- ### 其他注意事项 1. **单位大小写**: 单位后缀不区分大小写(`10M` = `10m`),但**建议用小写**避免歧义[^1]。 2. **分卷命名规则**: `zip` 自动生成分卷名: - 主卷:`.zip` - 分卷:`.z01`, `.z02`, ... , `.z99`, `.z100` 3. **大文件处理**: 压缩超大文件时,建议使用 `tar` 分卷(避免 `zip` 内存限制): ```bash # 创建分卷 tar cvzf - /big_data | split -b 2G - bigdata.tar.gz. # 解压分卷 cat bigdata.tar.gz.* | tar xzvf - ``` --- ### 常见错误排查 | 错误现象 | 原因 | 解决方案 | |---------|------|---------| | `Invalid split size` | 单位缺失(如 `-s 100`) | 添加单位后缀:`-s 100m` | | `Unable to read number...` | 数字以 `0` 开头 | 移除前导零:`10m` 代替 `010m` | | `Argument format error` | 包含特殊字符(如 `-s 100-m`) | 确保参数格式为纯数字+单位 | > 💡 **提示**:使用 `zip --help | grep split -A 3` 查看分卷参数详细说明[^1]。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值