![](/img/trans.png)
[英]output of dns-sd browse command not redirected to file in busybox shell(ash)
[英]Ash shell (busybox), check file extension?
我正在将脚本从 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
用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
使用expr
命令进行正则表达式匹配,并使用%
运算符去除已知后缀。 expr
隐式地将所有正则表达式锚定到字符串的开头,因此您需要以.*
开始每个正则表达式以匹配后缀。 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.