shell - 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
解决方案
使用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
推荐阅读
- c# - 将数组添加到属性
- flutter - 如何在 Flutter 中向 Card 中添加导航路线
- javascript - Webview - 如何从 Javascript 按钮触发 Java 函数
- django - X加速重定向不下载文件
- react-native - date-fns.distanceInWordsStrict 在 react-native 中使用时失败
- logging - 在 Google Cloud Platform 中显示日志大小
- java - 捕获和加密从 Wildfly 服务发送的数据包
- python - NameError:未定义名称“firebase”-Firestore GeoPoint
- java - 如何将 Joda 的 Duration 转换为 java.time.Duration?
- postgresql - 如何在 postgresql 中存储国际语言字符串?