在网络共享上使用Bash脚本删除重复文件

时间:2014-01-29 19:53:12

标签: bash backup rsync

为了防止这种情况被关闭,我将问题缩小到了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脚本,更具体一点。谢谢你们。

2 个答案:

答案 0 :(得分:3)

您应该通过修复rsync脚本来解决此问题,而不是通过编写新的bash脚本来解决此问题。

如果您的源是干净的,并且它只是您的备份目标,那么您可以通过在“rsync”的参数列表中添加“--delete”来轻松清理目标。该标志告诉rsync删除目标上源上不存在的任何目录。

答案 1 :(得分:2)

虽然我同意@ Mark建议修复rsync脚本,但您可以使用findexec来查找重复文件。像这样:

cd /mnt/data
find . -type f -exec bash -c "ls /mnt/backup/'{}' &> /dev/null && echo /mnt/backup/'{}'" \;

将回显两个目录下同一路径中存在的所有文件。打印的路径将是备份目录中的文件。您可以将echo更改为rm -f以删除文件,但要小心。

相关问题