我有以下问题:我想编写一个bash脚本,它读取同一个文件夹中扩展名为.jpg的单个文件的名称,并将其用作存档名称。
/Sample.jpg
/Sample.7z <--
ls *jpg > OutputFileName
...
7za a Sample.7z ...我怎样才能做到这一点?
发布于 2019-11-18 18:20:23
您可以使用简单的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”。
https://unix.stackexchange.com/questions/552811
复制相似问题