組み込みデバイスで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;
}
ご覧のとおり、このエラーを回避する方法はありません。