为了防止这种情况被关闭,我将问题缩小到了bash脚本。
已编辑的问题
我运行一个小型网络,在备份例程中犯了一个错误。我每天都在运行rsync
,如何设置它是如果在源上重命名文件夹,则可能会在备份设备上发生重复。
rsync -varz --no-perms --exclude-from=/path/to/exclude_file --log-file=/path/to/rsync_logs
最近,用户做了很多更改,导致了很多重复。
我可以使用哪种bash脚本策略来攻击它?我已尝试递归列出并输出到文件并使用diff
进行比较。这让我看到了重复问题的影响。如果我可以使用某种自动化过程来删除重复项,那将节省我的时间。
我开始尝试这样的事情:
find /mnt/data/ -maxdepth 2 -mindepth 1 -type d -printf '%f\n' > data.txt
并与之比较:
find /mnt/backup/ -maxdepth 2 -mindepth 1 -type d -printf '%f\n' > backup.txt
我的问题的一个例子是:
drwxr-xr-x 0 bob staff 0 Jun 25 2009 7-1-08
drwxr-xr-x 0 bob staff 0 Jun 25 2009 2008-07-01
这是备份驱动器中的一个示例,这两个目录的内容相同。备份包含两者,而源只有这一个:
drwxr-xr-x 0 bob staff 0 Jun 25 2009 2008-07-01
这种问题贯穿整个备份驱动器。
修改
我创建了两个列表并diff
编辑了它们,然后手动完成并协调了更改。一旦我进入它,它并没有我原先想象的那么糟糕。我在这里给了两个答案+ 1s(@Mark Pettit和@ebarrere),因为我最终使用了每个答案中的碎片。我在这个实验过程中运行了几个find命令,最后我也改变了我的rsync
脚本,更具体一点。谢谢你们。
答案 0 :(得分:3)
您应该通过修复rsync脚本来解决此问题,而不是通过编写新的bash脚本来解决此问题。
如果您的源是干净的,并且它只是您的备份目标,那么您可以通过在“rsync”的参数列表中添加“--delete”来轻松清理目标。该标志告诉rsync删除目标上源上不存在的任何目录。
答案 1 :(得分:2)
虽然我同意@ Mark建议修复rsync
脚本,但您可以使用find
和exec
来查找重复文件。像这样:
cd /mnt/data
find . -type f -exec bash -c "ls /mnt/backup/'{}' &> /dev/null && echo /mnt/backup/'{}'" \;
将回显两个目录下同一路径中存在的所有文件。打印的路径将是备份目录中的文件。您可以将echo
更改为rm -f
以删除文件,但要小心。