bash动态解压缩gz名称并存储在变量中

时间:2018-07-26 16:09:20

标签: bash

我需要将运行gunzip file.gz的结果文件名存储到变量中。 The only answer I've found用于提前知道文件名。但是,就我而言,.gz文件将被动态生成,因此接受的答案不起作用。

我尝试过:

cd /var/www/backup/db
DB_TAR=$( /usr/bin/ls site_name* -Rt | /usr/bin/head -1 )
DB=$( gunzip ${DB_TAR} )
echo "${DB}"

但输出中什么也没有。

1 个答案:

答案 0 :(得分:1)

cd /var/www/backup/db || exit
{ IFS= read -r -d ' ' timestamp && IFS= read -r -d '' latest; } < <(
  find site_name* -type f -name '*.gz' -printf '%T@ %p\0' | sort -znr
)
gunzip -- "$latest" || exit
uncompressed_latest="${latest%.gz}"
echo "$uncompressed_latest"

  • 解析ls本质上是容易出错的; BashFAQ #3描述了找到最新/最旧/ etc文件的更可靠方法,此处使用其中一种方法(尽管需要GNU findsort)。
  • 最好用parameter expansion剥离已知的后缀。 ${var%suffix}返回var的内容,并删除了模式suffix的最短匹配项。