我正在制作一个备份系统。
我有2台服务器: main发送数据到备份服务器,然后备份服务器压缩数据。为了节省磁盘使用量,我只需压缩已更改的文件,这要归功于存储上次备份时间的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
它返回预期的文件列表。
感谢您的帮助!
答案 0 :(得分: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 ...
答案 1 :(得分: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不会退出。