我正在使用以下脚本来备份一些文件和文件夹。
#!/bin/sh
#backup.sh
zip -r backup_`date +%F | sed -e "s/-/_/g"`.zip \
/home/xralf/.local/share/Anki2/my_deck \
/home/xralf/.local/share/Anki2/addons \
/home/xralf/.local/share/Anki2/prefs.db \
/home/xralf/books \
/home/xralf/.mozilla \
/home/xralf/.vim \
/home/xralf/.vimrc \
/home/xralf/.vim_bookmarks \
/home/xralf/.NERDTreeBookmarks \
/home/xralf/.bashrc \
/home/xralf/.bash_aliases \
/home/xralf/.bash_profile \
/home/xralf/.profile \
/home/xralf/.Xmodmap \
/home/xralf/Downloads/sitedelta-backup.json
/home/xralf/.config/i3/config \
/usr/share/X11/xkb/symbols/us \
我手动运行脚本,然后将文件复制到闪存驱动器。
我想改进这个过程,以便能够更频繁地备份。目标是在闪存驱动器上备份这些文件和文件夹。
我希望只需按下一个按钮或启动一个命令,它就会将所有选定的文件和文件夹复制到闪存驱动器,但我希望每天只备份已更改的内容(同步、添加/删除),这样会很快。每周(或每月)一次,我想用我的脚本创建完整备份backup.sh
您推荐什么(脚本或应用程序)?
答案1
我建议您创建一个特定的服务,每次插入闪存驱动器时都会触发该服务。该服务将触发特定的 shell 脚本来备份您想要的内容,并可能卸载驱动器以使其内容保持完整。您还可以创建两个不同的服务,一个用于定期备份,另一个用于每周备份。这里的优点在于您甚至不需要按下按钮或手动启动脚本。一切都会自动发生。
进一步来说:
- 创建服务(文本文件):(
/home/ralf/.config/systemd/user/backup.service
我假设ralf
是您的用户名)。将其用作用户特定服务非常重要,这样才能发出通知。
该文件包含以下内容:
[Unit]
Description=Backup files to flash drive
Requires=media-ralf-YourFlash.mount
After=media-ralf-YourFlash.mount
[Service]
Type=notify
ExecStart=/home/ralf/backup.sh
Environment="DISPLAY=:0"
RemainAfterExit=yes
Restart=always
RestartSec=60
[Install]
# This is necessary to start the program when the graphical environment is ready, enabling 'notify-send'
WantedBy=graphical-session.target
WantedBy=media-ralf-YourFlash.mount
- 你的剧本
backup.sh
会是这样的
喜欢:
#!/bin/bash
# Will perform a sync of /home/user/ to flash drive
notify-send "Mounted"
# Rsync
rsync /home/ralf/ /media/ralf/YourFlash/
# Other rsync commands or your zip command.
...
umount /media/ralf/YourFlash
notify-send "Backup complete. Please remove flash drive."
exit 0
- 启用您的服务,以便它在启动时启动
sudo systemctl --user enable backup.service
- 如果想直接使用,则启动它:
sudo systemctl --user start backup.service
编辑
WantedBy
在部分中添加了一行Install
。在启用服务之前创建此行非常重要。Type=notify
还添加了RemainAfterExit=yes
确保在拔下/重新插入 USB 密钥时服务重新启动的功能。