删除网络共享上带有Bash脚本的重复文件



为了防止这个问题被关闭,我把问题缩小到了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 '%fn' > data.txt

并与进行比较

find /mnt/backup/ -maxdepth 2 -mindepth 1 -type d -printf '%fn' > 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对它们进行了编辑,然后手动完成并协调了更改。一旦我进入其中,并没有我最初想象的那么糟糕。我在这里对两个答案(@Mark Pettit和@ebarrere)都给出了+1,因为我最终确实使用了每个答案中的片段。在这个实验过程中,我运行了几个find命令,最后我也修改了rsync脚本,更具体地说。谢谢大家。

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

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

尽管我同意@Mark关于修复rsync脚本的建议,但您可以使用findexec来查找重复文件。类似这样的东西:

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

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

相关内容

  • 没有找到相关文章

最新更新