我想使用bash为我的CryptoCurrency Wallets创建一个备份脚本。所有钱包都在/home
的子文件夹中。
find /root/ -name 'wallet.dat' -exec cp {} /home/backup \;
此命令复制文件;但是,我想做以下事情:
钱包总是这样的结构:/home/<coinname>/.<coinname>/wallet.dat
。
我希望将备份文件命名为<coinname>-wallet.dat
,以便文件夹/home/backup
有以下文件:
等等。
有一种简单的方法吗?
答案 0 :(得分:0)
这应该这样做。如果它看起来像你想要的那样,请删除单词echo
。
#!/bin/bash
find . -name wallet.dat | while read x
do
original="$x"
# Strip filename off right end
x=${x%/wallet.dat}
# Strip all but last directory off left end
x=${x##*/}
newname="/home/backup/${x}-wallet.dat"
echo cp "$original" "$newname"
done
将上面的文件保存为BackupWallets
并执行此操作以运行它:
chmod +x BackupWallets
./BackupWallets
答案 1 :(得分:0)
以下使用tar
执行类似操作的方式略有不同:
find /root -name wallet.dat -print | tar -cv -T - -f /home/backup/wallets.tar
它使用find
查找名为wallet.dat
的所有文件,并将它们发送到tar
,以便复制到/ home / backup中的tar文件中。
请记住,这只会创建一个文件的副本,而不是具有多个时间点的备份,以便在丢失的情况下返回 - 如果您的文件损坏并且您的备份在损坏后运行但是在你检测到它之前,你的备份会用损坏的副本覆盖你的好副本......所以最好把日期放在tarfile名称中,这样你每次都会得到一个新的,比如:
find /root -name wallet.dat -print | tar -cv -T - -f "/home/backup/$(date +'%Y-%m-%d')_wallets.tar"
然后您每天运行一个新文件,例如/home/backup/2014-04-18_wallets.tar
答案 2 :(得分:0)
直接调整你的命令:
find /root/ -name 'wallet.dat' -execdir bash -c 'echo cp "$0" "/home/backup/${PWD##*/}-${0#\./}"' {} \;
<强>解释强>
bash
,execdir
,bash
进程将从包含找到的文件的目录执行,因此$PWD
将扩展到包含目录,${PWD##*/}
在删除所有内容之后扩展到当前目录,包括最后一个斜杠(很可能是包含目录的基本名称),${0#./}
扩展为删除句点和斜杠后找到的文件的名称。如果您对此感到满意,请移除echo
。