我有以下问题:我想编写一个 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”。