- 此问题在此处已有答案**:
Difference between sh and Bash(11个答案)
Brace expansion from a variable in Bash(2个答案)
5天前关闭。
这篇文章是编辑和提交审查昨天.
#!/bin/sh
BackupPath="/root/upfOps/te"
if [ ! -d "$BackupPath" ]; then
mkdir -p "$BackupPath"
fi
MYSC_JSON_YAML_DB="home/mysc/cmin02sms/etc/{*.json,*.yaml,*.db}"
tar vczf /root/upfOps/te/t1.tar.gz $MYSC_JSON_YAML_DB
echo $MYSC_JSON_YAML_DB
tar vczf /root/upfOps/te/t2.tar.gz /home/mysc/cmin02sms/etc/{*.json,*.yaml,*.db}
输出:
[root@upf-100.novalocal upfOps]# ./test
tar: home/mysc/cmin02sms/etc/{*.json,*.yaml,*.db}:无法 stat: 没有那个文件或目录
tar: 由于前次错误,将以上次的错误状态退出
home/mysc/cmin02sms/etc/{*.json,*.yaml,*.db}
tar: 从成员名中删除开头的“/”
/home/mysc/cmin02sms/etc/conf.ismpbus.json
/home/mysc/cmin02sms/etc/conf.simu.json
/home/mysc/cmin02sms/etc/conf.slrun.json
/home/mysc/cmin02sms/etc/conf.smp.json
/home/mysc/cmin02sms/etc/chassis.yaml
/home/mysc/cmin02sms/etc/lager.yaml
/home/mysc/cmin02sms/etc/microservice.yaml
/home/mysc/cmin02sms/etc/conf.crontab.db
[root@upf-100.novalocal upfOps]#
第一个tar命令导致"cannot stat:没有这样的文件或目录""。2但是第二个tar可以成功地压缩这些文件。
如何压缩一个变量中有多个文件后缀的文件?有没有人能给出一个只使用sh或bash脚本的任何方式的解决方案?
我只想使用一个变量,例如
tempPath=home/mysc/cmin02sms/etc/{*.json,*.yaml,*.db}
tar cvzf /root/etcFiles.tar.gz $tempPath
写tempPath变量的正确方法是什么?
1条答案
按热度按时间hgqdbh6s1#
您的选项仅限于
#!/bin/sh
,如果您可以将其更改为bash(推荐使用#!/usr/bin/env bash
),则可以通过extglob
shell选项使用扩展的文件匹配模式:我没有使用中间变量,如果你愿意,你可以使用一个,但是在一个变量中存储多个值是不好的做法;它实际上应该是一个数组(与extglob一样,它不是POSIX特性,因此需要bash)。
然后在
tar
中使用数组,如下所示:注意我没有使用全大写的变量名;全大写应该保留给特殊的变量,通常是那些为了从设置它们的shell启动的外部程序而导出到环境中的变量。