首页 > 解决方案 > Ash shell(busybox),检查文件扩展名?

问题描述

我正在将脚本从 bash 移植到busybox shell,ash - 我如何检查文件具有的文件扩展名(并剥离该扩展名以生成目录名称)?

bash 代码片段如下所示:

if [[ "$filename" =~ '\.tar\.gz' ]]; then
    tar -xzf "$filename"
    dirname="${filename::${#filename}-7}"
elif  [[ "$filename" =~ '\.tar\.bz2' ]]; then
    tar -xjf "$filename"
    dirname="${filename::${#filename}-8}"
elif  [[ "$filename" =~ '\.tar\.xz' ]]; then
    xzcat "$filename" | tar -x
    dirname="${filename::${#filename}-7}"
else
    echo "Unknown extension for file: ${filename}" >&2
    exit 1

在运行它包含的脚本时,我得到的输出显示检查扩展的代码未被识别:

文件的未知扩展名:zlib-1.2.11.tar.gz

标签: shellbusybox

解决方案


使用case. 用于basename删除扩展(我发现它更干净,然后${var::}扩展)。

case "$filename" in
*.tar.gz)
    tar something
    dirname=$(basename "$filename" .tar.gz)
    ;;
*.tar.bz2)
    tar something
    dirname=$(basename "$filename" .tar.gz2)
    ;;
# and so on
esac

推荐阅读