我有一个简单的 bash 脚本来生成压缩的 tar 文件并将其上传到外部服务器以进行备份。除了服务器上的文件之外,我还想包括一些 mysql 数据库的转储。
由于磁盘空间限制,我无法再在生成 tar 存档之前将数据库转储预先生成到磁盘上的文件中。我想做的就是以某种方式将转储直接传输到 tar。
我的第一次尝试是尝试创建一个命名管道并让 tar 读取它。对于每个要转储的数据库,生成一个到 mysqldump 进程的管道:
mkfifo $DB.sql
mysqldump --result-file=$DB.sql $DB &
echo $DB.sql >>$FILELIST
生成要备份的所有文件的列表后:
tar c -P --files-from=$FILELIST | gzip | curl ...
我发现这并不像我预期的那样工作。 tar 只是在归档中生成一个管道条目,而不是读取管道的内容。
我找不到任何 tar 开关来改变行为。有没有办法让 tar 读取管道,就好像它是一个文件一样,或者是否有其他实用程序能够处理这种类型的情况?
答案1
答案2
不太确定这就是你想要的。从管道读取意味着从标准输入读取。这是使用tar xf -
(或tar xzf -
压缩流)完成的,其中-
表示标准输入。与写入标准输出类似:(tar cf -
或tar czf -
)。