2016-07-16 257 views
0

最后编辑:$DATE变量是什么拧我。出于某种原因,当我重新格式化它时,它工作正常。有谁知道为什么这是一个问题?在bash脚本“没有这样的文件或目录”

下面是最终的备份脚本:

#!/bin/bash 
#Vars 
OUTPATH=/root/Storage/Backups 
DATE=$(date +%d-%b) 

#Deletes backups that are more than 2 days old 
find "$OUTPATH"/* -mtime +2 -type f -delete 

#Actual backup operation 
dd if=/dev/mmcblk0 | gzip -1 - | dd of="$OUTPATH"/bpi-"$DATE".img.gz bs=512 count=60831745 

旧脚本:

#!/bin/bash 
#Vars 
OUTPATH=~/Storage/Backups 
DATE=$(date +%d-%b_%H:%M) 

#Deletes backups that are more than 2 days old 
find "$OUTPATH"/* -mtime +2 -type f -delete 

#Actual backup operation 
dd if=/dev/mmcblk0 | gzip -1 - | dd of="$OUTPATH"/bpi_"$DATE".img.gz bs=512 count=60831745 

这是一个脚本来备份我的香蕉PI图像发送到外部硬盘驱动器。我是新来的bash脚本,所以我知道这将是一个简单的办法最有可能的,但这里是我的问题:

我正在从〜/脚本

和输出文件的脚本〜/存储/备份(挂载点为外置硬盘,在我的/ etc/fstab中指定。

的命令的工作正常时,OUTPATH=.,即它只是备份到脚本运行的当前目录。我知道我可以只要将脚本到备份文件夹,并从那里运行它,但我想加入到我的crontab,所以如果我能保持所有脚本在一个目录只是为了组织的目的,将是不错的。

只是想知道如何正确地使脚本写我的形象到$OUTPATH变量。

编辑:我试图改变$OUTPATH变量设置为位于/dev/root/(脚本本身也位于同一台设备上)和它的工作一个test目录,所以我想它只是试图写一个问题图像以一个装置,该装置从该脚本本身位于一个不同

/etc/fstab与所述外部HDD I想用线如下:

/dev/sdb1 /root/Storage exfat defaults 0 0

/root/Storage/Backups文件夹我s我正在尝试写入映像到

+1

shebang行错了:'#/!bin/bash' - >'#!/ bin/bash'。除此之外,你的脚本对我来说工作得很好。 – John1024

+0

哎呦复制的脚本在当这仅仅是一个错误。有趣的是,它适用于你虽然,不知道这对我来说意味着什么 –

+0

这里显示的脚本和你正在使用的脚本之间是否还有其他区别?在shell脚本中,细微的变化可以产生很大的不同。 – John1024

回答

0

使用备份目录的完整路径名填充OUTPATH。

+0

我以为我做过,这可能是一个非常蹩脚的问题,但是当我发出'pwd'命令时不是打印到屏幕上的完整路径名?因为我从字面上复制并粘贴它。除非你的意思是'/ dev/sdaX'路径? –

+0

是的,@MichaelBoyd,你的脚本,如上所示,确实提供完整的(绝对)路径名。 – John1024

0

OUTPATH=~/Storage/Backups 

波浪线扩展在find

find "$OUTPATH"/* .... 

"$OUTPATH"时,不执行你可以与FULLPATH更换~OUTPATH或在find的实际路径替换OUTPATH

相关问题