我试图找出一种在Ubuntu Server LTS上使用tar +管道的方法.
我有一个postgresql命令(pg_dump
),它在标准输出上输出大量的sql:
pg_dump -U myUser myDB
Run Code Online (Sandbox Code Playgroud)
我知道如何将其重定向到文件:
pg_dump -U myUser myDB > myDB.sql
Run Code Online (Sandbox Code Playgroud)
为了节省一些磁盘空间,我宁愿把它压缩:我可以从myDB.sql做一个tar.gz文件,然后删除myDB.sql.
但我想知道 - 有没有办法在不创建中间.sql文件的情况下这样做?我相信这可以用管道完成......但是我不是外壳大师,对它们知之甚少(我能做到ls | more
,就是这样).我尝试过几种不同的pg_dump .. | tar ...
但没有成功的.
如何使用管道将输出pg_dump
用作tar的输入?或者我刚搞错了什么?
Poi*_*nty 31
我根本没看到"焦油"是怎么形成的; 为什么不只是压缩转储文件本身?
pg_dump -U myUser myDB | gzip > myDB.sql.gz
Run Code Online (Sandbox Code Playgroud)
然后,恢复:
gzip -cd myDB.sql.gz | pg_restore ...
Run Code Online (Sandbox Code Playgroud)
"tar"实用程序用于将一堆文件和目录捆绑到一个文件中(名称是"磁带归档"的缩写).在这方面,"tar"文件有点像"zip"文件,除了"zip"总是意味着压缩而"tar"没有.
最后请注意"gzip"不是"zip"."gzip"实用程序只是压缩; 它不会制作档案.
在您的用例中,pg_dump
只创建一个需要压缩的文件.正如其他人所暗示的那样,在*nix land中,存档是表示文件系统的单个文件.为了与每个任务的一个工具的unix意识形态保持一致,压缩是与存档分开的任务.由于存档是文件,因此可以压缩文件,也可以压缩任何其他文件.因此,由于您只需要压缩单个文件,因此没有必要使用tar,因为其他人已经正确指出了.
但是,您的标题和标签将为未来的读者带来可能期待以下内容的读者......
假设你有一个完整的PostgreSQL备份文件夹来存档和压缩.这应该仍然完全使用tar完成,因为它-z
或--gzip
标志调用gzip工具.
因此,我们还要说,您需要对数据库存档进行加密,以便将它们转移到可疑的安全异地备份解决方案(例如与S3兼容的对象存储库).我们假设您喜欢使用AES密码进行预共享令牌(密码)加密.
这可能是一种有效的情况,您可能希望将数据与tar进行管道传输.
存档 - >压缩 - >加密
tar cz folder_to_encrypt | openssl enc -aes-256-cbc -e > out.tar.gz.enc
Run Code Online (Sandbox Code Playgroud)
解密 - >解压缩 - >提取
openssl enc -aes-256-cbc -in ./out.tar.gz.enc -d | tar xz --null
Run Code Online (Sandbox Code Playgroud)
请参阅GNU tar文档以获取有关--null
标志如何工作的详细信息,以及有关可能需要将文件传递给tar的其他情况的更有用示例.