简体   繁体   English

Ash shell(busybox),检查文件扩展名?

[英]Ash shell (busybox), check file extension?

I'm porting a script from bash to the busybox shell, ash - how can I check what file extension a file has (and strip that extension to get a generate a directory name) ?我正在将脚本从 bash 移植到 busybox shell,ash - 如何检查文件具有的文件扩展名(并去除该扩展名以生成目录名)?

The bash code fragment looks like this: 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

On running the script it contains I get output showing that the code to check the extension is not recognised:在运行它包含的脚本时,我得到的输出显示无法识别检查扩展的代码:

Unknown extension for file: zlib-1.2.11.tar.gz文件的未知扩展名:zlib-1.2.11.tar.gz

Use case .case Use basename to remove the extension (which I find cleaner then ${var::} expansion anyway).使用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

Use the expr command for regular expression matching, and the % operator to strip a known suffix.使用expr命令进行正则表达式匹配,并使用%运算符去除已知后缀。 expr implicitly anchors all regular expressions to the beginning of the string, so you'll need to start each one with .* to match a suffix. expr隐式地将所有正则表达式锚定到字符串的开头,因此您需要以.*开始每个正则表达式以匹配后缀。 expr also writes the number of characters matched to standard output, but you probably don't care to see that. expr还写入与标准输出匹配的字符数,但您可能不关心看到它。

if expr "$filename" : '.*\.tar\.gz' > /dev/null; then
    tar -xzf "$filename"
    dirname="${filename%.tar.gz}"
elif expr "$filename" : '.*\.tar\.bz2' > /dev/null; then
    tar -xjf "$filename"
    dirname="${filename%.tar.gz}"
elif expr "$filename" : '.*\.tar\.xz' > /dev/null; then
    xzcat "$filename" | tar -x
    dirname="${filename%.tar.zx}"
else
    echo "Unknown extension for file: ${filename}" >&2
    exit 1
fi

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM