我无法使用 bash 脚本进行 tar 排除。
#!/bin/bash
CMD='tar --exclude=*.{db,log,token} -zcvf /home/pi/backup/2020.11.08-18.04.59.backup.tgz -P /home/pi/backup/test'
echo $CMD
sudo $CMD
但是,如果我运行 echo 输出命令,它就会起作用。
tar --exclude=*.{db,log,token} -zcvf /home/pi/backup/2020.11.08-18.04.59.backup.tgz -P /home/pi/backup/test
我正在尝试根据文件扩展名排除文件。
焦油(GNU 焦油)1.30
答案1
在 bash 中你应该使用一个数组:
cmd=(tar --exclude='*'.{db,log,token} -zcvf /home/pi/backup/2020.11.08-18.04.59.backup.tgz -P /home/pi/backup/test)
echo "${cmd[@]}"
=> tar --exclude=*.db --exclude=*.log --exclude=*.token ...
"${cmd[@]}"
# etc
上面的内容'*'
是为了防止有人在您的当前目录中植入名为--exclude=foo.log
,之类的文件,--exclude=bar.log
以便使您的命令失败;-)
请注意,这与 tar 无关,而是与您的 shell (bash) 及其解析和扩展命令行的方式有关;此外,{db,log,...}
其他 shell(如 dash 或 busybox sh)都不支持数组或大括号扩展。