【问题标题】:bash is zipping entire homebash 正在压缩整个家庭
【发布时间】:2017-03-16 04:54:36
【问题描述】:

我正在尝试从/home/mc/server/ 备份所有world* 文件夹并将压缩文件放入/home/mc/backup/

#!/bin/bash
moment=$(date +"%Y%m%d%H%M")
backup="/home/mc/backup/map$moment.zip"
map="/home/mc/server/world*"
zipping="zip -r -9 $backup $map"
eval $zipping

压缩文件按预期在backup 文件夹中创建,但是当我解压缩它时,它包含整个 /home 目录。我以两种方式运行这个 bash:

  1. 手动
  2. 使用用户的 crontab

最后,如果我输入echo $zipping 的回显,这将正确打印我需要触发的命令。我错过了什么?提前谢谢你。

【问题讨论】:

  • 不要使用 eval,也许试试`zip -r -9 $backup $map`? (带反引号?)
  • @AlexanderKohler,bash 正在打印该更改的错误:adding:: command not found
  • @AlexanderKohler 尝试将zip 命令的输出 作为另一个命令运行。 $zipping 本身会有点工作(尽管没有解析 shell 结构,如管道或复合命令)。

标签: bash centos6


【解决方案1】:

没有理由在此处使用eval(不,如果您既想记录命令行并随后执行它,则以 DRY 为由证明它不是 IMO 的充分理由。)

定义一个函数并使用适当的参数调用它:

#!/bin/bash
moment=$(date +"%Y%m%d%H%M")

zipping () {
  output=$1
  shift
  zip -r -9 "$output" "$@"
}

zipping "/home/mc/backup/map$moment.zip" /home/mc/server/world*

(我承认,我不知道是什么导致了您报告的行为,但最好在尝试进一步诊断之前确认它不是特定于 eval 的使用。)

【讨论】:

  • 很好奇,因为当我解压缩它时,它也包含/home,但是这样它只是压缩了我真正需要的文件,看起来它保留了整个路径
  • 在某种意义上,/home 在存档中,因为在必要时提取存档会创建/home。不过,/home 中除 me 之外的其他子目录应该存在。
  • 没错。非常感谢您的帮助和解释。
猜你喜欢
  • 2011-06-24
  • 1970-01-01
  • 2016-12-26
  • 1970-01-01
  • 2020-10-04
  • 1970-01-01
  • 2015-08-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多