正确使用带命名管道的 gzip
Correct using gzip with named pipes
我正在尝试创建一个命名管道,它可以将目录作为输入并将其放入 tar.gz 存档
我试图做的是这样的:
mkfifo channel
gzip -9 -c < channel > out.tar.gz
但它只接受像
这样的文本数据
cat myfile > channel
有什么方法可以将目录传递到此管道或修改它以便将其作为参数?
谢谢。
解决方案就像
一样简单
tar cf - MyDirectory/ > channel
我用的频道是一样的。
您的回答描述了一个命名管道,它压缩 它获得的任何输入。如果您通过管道输入目录 (a .tar
) 的未压缩存档,它会将其压缩为压缩存档 (a .tgz
).
此外,任何其他作为输入的字符串都将使用此压缩:
$ echo "hello world" > channel
$ zcat out.tar.gz
这将打印 hello world
并且文件 out.tar.gz
将不是正确的 .tgz
(或 .tar.gz
只是更长的形式)。
您最初的问题听起来更像是您想将 目录 作为输入(还不是它的存档)。这可能意味着目录的路径。你可以这样实现:
read dirpath < channel; tar cfz out.tgz "$dirpath"
这将休眠直到可以从管道中读取内容。
在另一个 shell 中,您可以提供要归档的目录:
echo path/to/directory > channel
然后第一个 shell 将开始工作,压缩命名目录并生成 out.tgz
文件。
我正在尝试创建一个命名管道,它可以将目录作为输入并将其放入 tar.gz 存档 我试图做的是这样的:
mkfifo channel
gzip -9 -c < channel > out.tar.gz
但它只接受像
这样的文本数据cat myfile > channel
有什么方法可以将目录传递到此管道或修改它以便将其作为参数? 谢谢。
解决方案就像
一样简单tar cf - MyDirectory/ > channel
我用的频道是一样的。
您的回答描述了一个命名管道,它压缩 它获得的任何输入。如果您通过管道输入目录 (a .tar
) 的未压缩存档,它会将其压缩为压缩存档 (a .tgz
).
此外,任何其他作为输入的字符串都将使用此压缩:
$ echo "hello world" > channel
$ zcat out.tar.gz
这将打印 hello world
并且文件 out.tar.gz
将不是正确的 .tgz
(或 .tar.gz
只是更长的形式)。
您最初的问题听起来更像是您想将 目录 作为输入(还不是它的存档)。这可能意味着目录的路径。你可以这样实现:
read dirpath < channel; tar cfz out.tgz "$dirpath"
这将休眠直到可以从管道中读取内容。
在另一个 shell 中,您可以提供要归档的目录:
echo path/to/directory > channel
然后第一个 shell 将开始工作,压缩命名目录并生成 out.tgz
文件。