我在嵌入式设备中使用 Busybox 1.32.0 软件包工具。当我在基于 Ubuntu 的 x64 平台上时,如果我尝试提取符号链接,那里打包的解压缩工具可以提取目标目录,而不会提示任何错误。但是,在 Busybox 的情况下,当我尝试执行此操作并且已经存在一个具有相同链接的符号链接存储在那里时,我收到此错误:
unzip: '/usr/local/bin/sample.so.1' exists but is not a regular file
当然它不是一个常规文件,因为它实际上是一个符号链接。但我想做的是:
- 继续解压缩过程,忽略此文件。
- 将此文件替换为 zip 中存储的符号链接文件。
有什么办法可以实现这一点吗?
答案1
不,不能。
您必须先将其删除。
这是实际情况源代码:
/* Does target file already exist? */
{
int mode = get_lstat_mode(dst_fn);
if (mode == -1) {
/* ENOENT: does not exist */
goto do_open_and_extract;
}
if (overwrite == O_NEVER) {
goto skip_cmpsize;
}
if (!S_ISREG(mode)) {
fishy:
bb_error_msg_and_die("'%s' exists but is not a %
s",
printable_string(dst_fn),
"regular file"
);
}
if (overwrite == O_ALWAYS) {
goto do_open_and_extract;
}
如您所见,无法绕过该错误。