我有各种 .gz 文件保存在不同的文件夹中。下面提到了文件顺序的示例。我想 ungz 它们并希望它们与以前位于同一文件夹中(例如,文件夹 1a 的 .gz 文件在 ungz-ing 后应保留在文件夹 1a 中)并稍后删除 .gz 文件。
Folder1
Folder 1a > many .gz files
Folder 2a > many .gz files
Folder 3a > many .gz files
.
.
.
我知道如何解压缩 .zip 文件,但这似乎不适用于 .gz 文件。我想在 R 中做,任何人都可以帮忙。我在 Windows 中工作。
如果你在 Linux 中,你可以在顶层文件夹中使用 find 命令找到所有的 .gz 文件,并将所有结果重定向到 gzip 命令(使用 -d 选项表示你想要解压)作为如下:
find . -name "*.gz" -exec gzip -d {} \;
在 Windows 中尝试:
gzip -r -d Folder1
要在 R 中执行此操作,请使用 system 函数执行上述两个命令之一。
先写一个解压单个文件的函数。
gzfile()
函数
可用于打开解压缩 gzip 文件的连接。
decompress <- function(file, dest = sub("\\.gz$", "", file)) {
# Set up source and destination connections
src <- gzfile(file, "rb")
on.exit(close(src), add = TRUE)
dst <- file(dest, "wb")
on.exit(close(dst), add = TRUE)
# Copy decompressed contents from source to destination
BATCH_SIZE <- 10 * 1024^2
repeat {
bytes <- readBin(src, raw(), BATCH_SIZE)
if (length(bytes) != 0) {
writeBin(bytes, dst)
} else {
break
}
}
invisible(dest)
}
然后,将其应用于要解压的文件:
files <- list.files(pattern = "*.gz", full.names = TRUE, recursive = TRUE)
for (file in files) {
decompress(file)
}