[英]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.