임베디드 장치에서 Busybox 1.32.0 패키지 도구를 사용하고 있습니다. Ubuntu 기반 x64 플랫폼에서 심볼릭 링크를 추출하려고 하면 거기에 패키지된 unzip 도구가 오류 메시지 없이 대상 디렉터리를 추출할 수 있습니다. 그러나 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;
}
보시다시피 이 오류를 우회할 수 있는 방법은 없습니다.