【问题标题】:Add additional extention to specific file in bash在 bash 中为特定文件添加附加扩展名
【发布时间】:2018-02-13 19:09:26
【问题描述】:

我正在尝试在 shell 脚本中压缩文件并输出其压缩前后的大小。到目前为止,我将文件名作为参数,使用 gzip 压缩文件,然后使用新文件名获取压缩后的大小。为了获得那个新文件名,我正在尝试将 .gz 扩展名添加到现有文件名中。

#!/bin/sh

#Name of the file input
NAME=$1

#Uncompressed size of the file input
UNCOMPRESSED=$(du -h $NAME | awk '{print $1}')

echo ""
echo "$NAME will be compressed using the gzip command."
echo ""
echo "gzip:"
echo "Uncompressed: $UNCOMPRESSED"

#Compress the file
GZNAME=$(gzip $NAME)

#Compressed size of the file input
COMPRESSED=$(du -h $GZNAME | awk '{print $1}')

echo "Compressed: $COMPRESSED"

如何在文件名中添加 .gz 扩展名?我知道这不对,但可能类似于NEW_NAME = $($NAME + ".gz") 我所看到的所有地方都在替换现有的扩展,但我想保留现有的扩展。所以$NAME --> file.txt$NEW_NAME ---> file.txt.gz 谢谢!

【问题讨论】:

  • 您希望变量GZNAME 包含什么?您为其分配了gzip $NAME 的输出,但该命令(很可能)不会产生任何输出,并且GZNAME 将为空。也就是说,除非您将 gzip 别名为 gzip -v 之类的东西,但即便如此,您也会收到整行输出,而不仅仅是 gzip 压缩的文件名。
  • new_name="${name}.gz"?
  • @MikeHolt 我应该更好地命名,也许将其重命名为 GZIP 会更有帮助。我本质上希望它只是压缩原始文件。它不应该返回任何东西,只创建那个 .gz 文件
  • @Cyrus 当我尝试得到file.txt.gz: not found

标签: bash shell gzip


【解决方案1】:

gzip 默认保留原始扩展名,默认添加.gz 作为后缀。

$ echo "what" > 1.txt
$ gzip 1.txt
$ ls 1.txt.*
1.txt.gz

如果您想要 .gz 以外的任何扩展名,请使用 -S 选项:

$ gzip -S .zip 1.txt
$ ls 1.txt.*
1.txt.zip

您对GZNAME=$(gzip $NAME) 的分配是错误的。 $GZNAME 将为成功压缩为空。如果您使用默认的 .gz 扩展名,只需使用

gzip "$NAME" && GZNAME="${NAME}.gz"

【讨论】:

  • hmm 我没有收到任何错误,但是当我尝试回显 GZNAME 时,我仍然一无所获。可能是因为 NAME 变了?还是将其存储为字符串并且在 gzip 运行时不会被弄乱? @iamauser
  • 没关系,我把变量名弄混了。谢谢!它与最后一个命令一起工作!
猜你喜欢
  • 2011-09-01
  • 2012-12-24
  • 2015-12-12
  • 1970-01-01
  • 1970-01-01
  • 2015-09-08
  • 1970-01-01
  • 1970-01-01
  • 2018-01-14
相关资源
最近更新 更多