如何使用 bash 在日志文件中存储备份文件的绝对路径?

Posted

技术标签:

【中文标题】如何使用 bash 在日志文件中存储备份文件的绝对路径?【英文标题】:How to store absolute path of back up files in log file using bash? 【发布时间】:2018-04-01 23:40:40 【问题描述】:

我正在使用 bash 来创建备份系统。我的代码是

  #!/bin/bash
  if [ ! -d "BackUp" ]
  then
    mkdir BackUp
  fi

  echo "enter number of access days you want to take for back up."
  read days

  bak="$(find . -mtime +$days)"

  for file in $bak
  do
    mv $file BackUp
  done

  tar -cvf BackUp.tgz BackUp >> backUp.log

所以,目前我只从 tar 获取日志文件。所以它不会打印完整路径它只需要当前工作目录作为日志文件中的文本。我的最后一行代码占用了日志文件的输入。

但是存储的路径是

 .BackUp/foo1
 .BackUp/foo2
 .BackUp/foo3

相反,我希望它是

 home/ubuntu/Downloads/BackUp/foo1
 home/ubuntu/Downloads/BackUp/foo2
 home/ubuntu/Downloads/BackUp/foo3

【问题讨论】:

不太确定我是否理解您的问题。你想得到什么的完整路径,目的是什么? ***.com/questions/5265702/… ? 将其存储在日志文件中 什么是?您对脚本中的哪一行代码不满意? @Nikul 你只是指向你的本地路径来查找文件、移动文件和压缩。你能澄清你的问题吗? @mattias 目前我正在从最后一行代码中输入日志文件,该代码显示哪些文件正在被压缩。 【参考方案1】:

您可以将绝对路径存储在变量中并在tar 命令中使用它:

BackUpDirFullPath=$(cd BackUp && pwd)

由于command substitution 调用子shell,您不会通过执行cd 离开当前目录。

更新: 为了使-v 输出绝对路径(在Mac OS 上),我必须更改到子shell 中的根目录并从那里执行它......类似这样:

(cd / && tar -cvf /$OLDPWD/BackUp.tgz $BackUpDirFullPath)

这确实会输出绝对路径...为了保留前导 /,您可以尝试保留路径名称的 -P

【讨论】:

以上是关于如何使用 bash 在日志文件中存储备份文件的绝对路径?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 Shell (BASH/ZSH/SH) 获取文件的绝对路径?

如何在Linux服务器中备份

网宿云云存储备份

shell脚本实现:每周 5 使用 tar 命令备份/var/log 下的所有日志文件

如何从 bash 脚本将消息记录到特定路径中的日志文件

5)NFS存储实时复制原理