如何在Bash中将日期追加到字符串

10

我有一个备份我树莓派的脚本

sudo dd bs=1M if=/dev/sda1 of=/home/pi/backup.img
zip -r /home/pi/backup/backup.zip /home/pi/backup.img
cp backup.zip ~/backup
我想知道如何在第二行生成的backup.zip文件中添加日期。有什么提示吗?

@Wug - 出于好奇,最糟糕的情况是什么?在写入文件时备份可能处于无效状态,但这是否是可能发生的所有不良后果?那会有多糟糕? - Mr. Llama
1
例如:EXT FS中的inode表往往是连续的,并且靠近文件系统的开头。假设你复制整个磁盘。当复制运行时,你删除一个文件并创建一个新文件。你已经复制的inode表仍然记得原始文件,但是你的批量复制还没有到达那里,当它到达该文件的块时,它们已被重新分配给其他文件,后者已经覆盖了它们。哎呀!如果删除一个文件夹,你最终会得到损坏的目录条目。这是一个完全可怕的世界。 - Wug
如果你在复制inode表和空闲块位图之间的(非常短暂的)时间窗口内进行某些操作,可能会发生更糟糕的事情。你可能会得到包含未分配块、已分配但未被任何文件使用的块、包含不存在文件的目录等等的文件。 - Wug
@Wug - 很好知道。把设备的备份放在自己身上也是物理上不可能的吧?例如,如果/dev/sda1是8 GB,那么转储文件就会是8 GB,除非它是100%空的,否则无法放在/dev/sda1上对吧? - Mr. Llama
@Mr.Llama 我修改了脚本,将其放在一个共享文件夹中,然后将其放在我的笔记本电脑上。 - thelearnerofcode
显示剩余3条评论
1个回答

27
您可以使用命令替换来完成此操作。
您可能还想熟悉日期组件:
# Save the file name in a variable so we don't repeat ourselves
outfile="/home/pi/backup/backup.zip.$(date +%Y%m%d)"

sudo dd bs=1M if=/dev/sda1 of=/home/pi/backup.img
zip -r "${outfile}" /home/pi/backup.img
cp "${outfile}" ~/backup

这里的魔法在于$(date +%Y%m%d)。它运行date +%Y%m%d并捕获输出,输出将是当前日期的YYYYMMDD格式。

4
你可能想要 .../backup.$(date ...).zip - glenn jackman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接