0

我正在做一个备份系统。

我有两台服务器:主服务器将数据发送到备份服务器,然后备份服务器压缩数据。flag-file为了节省磁盘使用量,我只是压缩了由于存储上次备份时间而更改的文件。

有时它工作正常,但有时我的脚本退出时出现error 123此错误来自xargs

描述是: 123 if any invocation of the command exited with status 1-125

所以command我推出的是:

find /home/* -name "." -not -path "/home/*/www/cache/*" -not -path "/home/*/www/cc/cache/*" -not -path "/home/*/www/ot/cache/*" -not -path "/home/backups/*" -newer /var/backups/data/flagfile -print0 | xargs -0 -r tar -czvf /home/backups/incremental/H14/backup.tar.gz

当我这样做时: find /home/* -name "*.*" -not -path "/home/*/www/cache/*" -not -path "/home/*/www/cc/cache/*" -not -path "/home/*/www/ot/cache/*" -not -path "/home/backups/*" -newer /var/backups/data/flagfile -print0

它返回一个像预期的文件列表。

谢谢你的帮助 !

4

2 回答 2

0

首先将文件列表重定向到文本文件可能是个好主意,调用它files.txt

find /home/* -name "." 
    -not -path "/home/*/www/cache/*" 
    -not -path "/home/*/www/cc/cache/*" 
    -not -path "/home/*/www/ot/cache/*"
    -not -path "/home/backups/*" 
-newer /var/backups/data/flagfile -print0 > files.txt

tar -czvf /home/backups/incremental/H14/backup.tar.gz ... 

任何用户都可以通过上传到他们的网站来向您的系统写入一些非常奇怪的文件名。

xargs崩溃时,使用 hexviewer 查看文件并检查非 ascii 字符;)还有您使用的是哪个版本的 xargs...

于 2013-08-15T07:03:47.070 回答
0

我用以下代码解决了这个问题:

find /home/* -name "." -not -path "/home/*/www/cache/*" -newer /var/backups/data/flagfile -print0 > files.txt

然后是 tar 命令:

tar czvf /home/backups/incremental/H14/backup.tar.gz --files-from files.txt --quoting-style=shell

转义特殊字符,--quoting-style=shell因此 tar 不会退出。

于 2013-08-21T15:55:49.073 回答