首页 > 解决方案 > 在 bash 流中压缩文件时保留文件名

问题描述

请求:当我使用流压缩文件时,我想保留原始文件名

我正在使用 gzip -9 压缩带有流(非常大的文件)的文件

gunzip -c ./test.zip | sed 's/;;/;0;/g' | sed 's/,/;/g' | sed 's/xy_ign/xy_ign_latitude;xy_ign_longitude/' | sed 's/xy_ign/xy_geopad_latitude;xy_geopad_longitude/' | gzip -9 >test.gz

当我解压缩我的文件时

gunzip test.gz

结果文件名是test而不是test.csv

我知道我可以使用 -N 选项来检索原始文件名

gunzip -N test.gz

但该文件与 mysql load data infile 一起使用,并且 load data infile 需要一个文件名才能正常工作

mysql -u user -p -e "LOAD DATA LOCAL INFILE '/tmp/test.gz' INTO TABLE test FIELDS TERMINATED BY ';' LINES TERMINATED BY '\n' ; SHOW WARNINGS" test_db

我怎样才能有一个包含文件名的 gzip 文件?

标签: mysqlbashshellcompressiongzip

解决方案


默认情况下,gzip 会将原始文件名和文件修改时间存储在 gzip 标头中。但是 gzip 需要使用文件名调用。例如

gzip foo
mv foo.gz bar.gz
gunzip -N bar.gz

会产生foo.


推荐阅读