gpt4 book ai didi

windows - 解压缩并通过管道传输到新文件时,如何从 zip 文件末尾删除垃圾?

转载 作者:太空宇宙 更新时间:2023-11-04 11:38:22 25 4
gpt4 key购买 nike

当我在 Mac 上通过 Excel 输出一个 .tsv 文件,压缩它,将它发送到 linux 机器,并使用 unzip 命令解压缩它时,我在文件末尾得到了一堆垃圾。在文件中,我有 19 行数据。我使用取景器右键菜单中的默认“压缩”功能。我通过 PHP 上传文件。这是我在 zip 文件上运行的命令(从脚本手动或自动运行):

unzip -aajp {zipfile} > {newfile}

当我打开 {newfile} 时,我在文件末尾看到了所有这些:

^@^E^V^G^@^B^@^@Mac OS X        ^@^B^@^@^@  ^@^@^@2^@^@^@ ^@^@^@^B^@^@^@R^@^@^@^@TEXTXCEL^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@

有什么方法可以去除文件末尾的垃圾吗?

当我运行时:

unzip -aaj {zipfile}

它将解压缩文件,将其转换为没有垃圾的文本/纯文本就好了。但是在我的 PHP 脚本中,我需要能够获得文件的确切名称/位置。

无论哪种方式,我都愿意这样做。我似乎无法找到正确的解决方案。话虽如此,它也需要适用于来自 Windows 的文件。有什么想法吗?

更新:

这是我最后做的,但仍然感觉草率。我仍然愿意接受更好的解决方案。

function decompress($filename) {
// generate a temporary filename
$tmpfile = '/tmp/'.mt_rand();

// Here we actually decompress the $working_zip_file file
$command = "unzip -aao $filename -d $tmpfile/ | egrep \"(inflating:|extracting:)\" | grep -v MACOS ";
$unzip_output = exec($command, $dummy, $unzipstatus);

// If things where unzipped properly
if($unzipstatus[0] == 0) {
$work_plain_file = preg_match('/\s*(inflating:|extracting:)(.*)$/', $unzip_output, $matches);
$work_plain_file = trim($matches[2]);
$clean_name = str_replace(' ', '_', $work_plain_file);
if($clean_name != $work_plain_file){
exec("mv \"$work_plain_file\" $clean_name");
$work_plain_file = $clean_name;
}
rename($work_plain_file, $new_file);
}
}

最佳答案

unzip 在资源分支方面是愚蠢的。您必须告诉它忽略它在 .DS_Store 中找到的任何内容。

关于windows - 解压缩并通过管道传输到新文件时,如何从 zip 文件末尾删除垃圾?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5795409/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com