7za 读取存档名称

7za 读取存档名称

我有以下问题:我想编写一个 bash 脚本,该脚本读取同一文件夹中扩展名为 .jpg 的单个文件的名称,并将其用作存档名称。

/Sample.jpg
/Sample.7z <--

ls *jpg > OutputFileName
...
7za a Sample.7z ...

我怎样才能实现这个目标?

答案1

您可以使用简单的 shell 参数扩展来解决这个问题——不需要 bash 功能:

#!/bin/sh

set -- *.jpg
if [ $# -ne 1 ] || [ "$1" = "*.jpg" ]
then
  echo "Error: there is not exactly one .jpg file here"
  exit 1
fi

7za a "${1%.jpg}".7z "$1" # ...

该脚本将位置参数设置为扩展的通配符*.jpg。如果不存在这样的结果文件名,则会出现错误并退出。测试的后半部分是针对(使用普通 sh)通配符不匹配的情况任何文件,因此仍然未展开为文字“ *.jpg”字符串。如果您使用的是 bash,则可以删除第二个检查,同时在命令shopt -s nullglob前面添加set以使通配符成为已删除在扩展期间如果它不匹配任何内容。

一旦我们有了一个匹配的文件,调用7za并通过参数扩展给出存档名称,这会删除尾随的“.jpg”,然后附加“.7z”。

相关内容