我想使用zip
压缩标准输入(stdin)的内容,例如:
echo 'foo bar' | zip > file.zip
这个方法可以正常工作,但是在解压时,未压缩的文件名是-
我想知道如何为标准输入指定一个文件名?
你可以正常地将文件导入,然后在压缩包中重命名它。
echo 'foo bar' | zip > file.zip
printf "@ -\n@=filename.txt\n" | zipnote -w file.zip
zip
没有提供强制命名的选项。如果您可以接受以某种方式创建“文件”,那么一种方法是将数据命令管道传输到命名管道中,然后将该命名管道添加到流式传输的 zip 中(这将压缩一个新文件并以该名称命名)。 - Hashbrown使用FIFO(命名管道)代替直接传输标准输入!
mkfifo text.txt # create fifo
echo 'foo bar' > text.txt & # pipe data to fifo, in background
zip --fifo file.zip text.txt # note the `--fifo` argument to zip
rm text.txt # cleanup
结果:
$ unzip -l file.zip
Archive: file.zip
Length Date Time Name
--------- ---------- ----- ----
8 2020-11-29 12:30 text.txt
--------- -------
8 1 file
|
,不会存储数据在硬盘上,数据会直接从写入者流向读取者。echo 'foo bar' > filename.txt && zip -m filename.txt.zip filename.txt
echo 'foo bar' | zip -@ /path/to/zipfile.zip
可以在保持文件名完整性的同时完成它。
echo 'foo bar' > FILENAME && zip file.zip FILENAME && rm FILENAME
。 - Hashbrown