我刚刚开始研究脚本的世界,特别是使用 bash,并且正在尝试编写一个简单的脚本来将文件夹(包含子文件夹)的内容复制到外部闪存驱动器上的备份位置(试图备份 Thunderbird 的数据)。我看过几个教程,我遇到的是如何导航到脚本中的父目录的问题。我要复制的文件夹存在于我的脚本文件所在的目录 1 中。要访问硬盘驱动器,我必须通过两个父目录进行备份......这是我创建的(我正在运行 ubuntu 12.04):
#! /bin/bash
#this attepmts to copy the profile folder for Thunderbird to the backup drive
echo "...attempting to copy Thunderbird Profile to back-up drive (My Passport)"
#attempt to backup two directories to where media folder (and therefore My Passport is located)
parent=$(dirname $PWD)
grandparent=$(dirname $parent)
greatgrand=$(dirname $grandparent)
#show what directories the variables are set to
echo "...parent: $parent"
echo "...grandparent: $grandparent"
echo "...greatgrand: $greatgrand"
echo "...copying..."
#FIRST SUBSHELL
#create a subshell and cd to directory to copy && tar directory
#tar: -c = create tarball, -f = tells it what to create " - " = is the unix convention for stdout (this goes with the -f) " . " = means the whole directory. I the end this first subshell is creating a tarball and dumping it in stdout
# | = pipe
#SECOND SUBSHELL
(cd /mcp/.thunderbird/lOdhn9gd.default && tar -cf - .) | (cd $greatgrand/media/My Passport/Gmail_to_Thunderbird_Backup && tar -xpf -)
当我运行它时,我得到:
mcp@mcp-Satellite-A135:~/BashScriptPractice$ ./thunderProfileBU.sh
...attempting to copy Thunderbird Profile to back-up drive (My Passport)
...parent: /home/mcp
...grandparent: /home
...greatgrand: /
...copying...
./thunderProfileBU.sh: line 23: cd: //media/My: No such file or directory
./thunderProfileBU.sh: line 23: cd: /mcp/.thunderbird/lOdhn9gd.default: No such file or directory
我应该从目录“/mcp”开始。我猜我在上面的第一个子脚本(最后一行)中不需要它,但是当我尝试只使用“cd /.thunderbird/lOdhn9g ...”时,我仍然收到错误消息。对于第二个子脚本,我不确定到底发生了什么。我只是误解了文件夹导航语法吗?
此外,这是一个附带问题,但是以这种方式编写脚本是软件开发人员应该知道如何做的事情,还是这种事情更多地留给系统管理员?我没有参加任何脚本课程,或者我知道我的大学提供的任何课程,但是我觉得它很有趣,并且可以看到它是如何非常有用的......谢谢!