我正在压缩大约 1.3 GB 的文件夹,每个文件夹都包含 1440 个 JSON 文件,发现在 macOS 或Raspbian 10 (Buster)上使用tar命令和 Python 的内置tarfile库之间存在 15 倍的差异
此脚本比较了两种方法:
#!/usr/bin/env python3
from pathlib import Path
from subprocess import call
import tarfile
fullpath = Path("/Users/user/Desktop/temp/tar/2021-03-11")
zsh_out = Path(fullpath.parent, "zsh-archive.tar.xz")
py_out = Path(fullpath.parent, "py-archive.tar.xz")
# tar using terminal
# tar cJf zsh-archive.tar.xz folderpath
call(["tar", "cJf", zsh_out, fullpath])
# tar using tarfile library
with tarfile.open(py_out, "w:xz") as tar:
tar.add(fullpath, arcname=fullpath.stem)
# Print filesizes
print(f"zsh tar filesize: {round(Path(zsh_out).stat().st_size/(1024*1024), 2)} …Run Code Online (Sandbox Code Playgroud) 我知道当时tar是为磁带存档制作的,但今天我们有存档文件格式,既可以聚合文件,又可以在相同的逻辑文件格式中执行压缩。
问题:
与使用在同一数据结构中进行聚合和压缩的文件格式相比,在聚合/压缩/解压缩阶段使用tar封装在gzip或 中是否存在性能损失bzip2?假设被比较的压缩器的运行时间是相同的(例如 gzip 和 Deflate 是相似的)。
该tar文件格式是否具有其他文件格式(例如.7z和.zip不具有)的功能?
既然tar是这样的旧文件格式,以及较新的文件格式存在的今天,为什么tar(无论是封装gzip,bzip2甚至是新的xz),今天仍然如此广泛的使用在GNU / Linux,Android的,BSD和其他类似UNIX操作系统,文件传输、程序源和二进制下载,有时甚至作为包管理器格式?
我在工作中经常使用 gzip 目录。我通常做的是
tar -zcvf file.tar.gz /path/to/directory
Run Code Online (Sandbox Code Playgroud)
有没有办法在这里指定压缩级别?即使压缩需要更多时间,我也想尽可能使用最佳压缩。
我通过搜索 Google 编写了以下脚本,它将我的 Linux 系统备份到存档:
#!/bin/bash
# init
DATE=$(date +20%y%m%d)
tar -cvpzf /share/Recovery/Snapshots/$HOSTNAME_$DATE.tar.gz --exclude=/proc --exclude=/lost+found --exclude=/sys --exclude=/mnt --exclude=/media --exclude=/dev --exclude=/share/Archive /
Run Code Online (Sandbox Code Playgroud)
这有效,但我想知道我是否可以格式化脚本以在多行上显示命令,类似于这样,以便以后轻松编辑:
tar -cvpzf /share/Recovery/Snapshots/$HOSTNAME_$DATE.tar.gz
--exclude=/proc
--exclude=/lost+found
--exclude=/sys
--exclude=/mnt
--exclude=/media
--exclude=/dev
--exclude=/share/Archive
/
Run Code Online (Sandbox Code Playgroud)
这样以后阅读和编辑就更容易了。是否可以通过这种方式格式化 Bash 脚本?
我有几个要压缩的大文件。例如,我可以这样做
tar cvfj big-files.tar.bz2 folder-with-big-files
Run Code Online (Sandbox Code Playgroud)
问题是我看不到任何进展,所以我不知道需要多长时间或类似的事情。使用v我至少可以看到每个文件何时完成,但是当文件很少而且很大时,这不是最有帮助的。
有没有办法让 tar 显示更详细的进度?比如完成的百分比或进度条或估计的剩余时间等等。对于每个文件或所有文件或两者。
我想在 Ubuntu 10.04 上使用 tar 命令创建一些 tar.gz(可能还有 tar.bz2)文件。
我想用密码保护文件。
执行此操作的命令是什么(我在谷歌上搜索过,但没有发现任何显示如何使用密码创建和提取压缩文件的内容)。
任何人都知道如何做到这一点?
我想将.tar.gz文件解压缩到特定目录。
存档文件位于/root/Documents. 我想把它解压到/root/Desktop/folder. 压缩文件中的文件夹结构应保留在目标目录中。
我有一些位于不同位置的脚本和文件,例如:
/etc/dir1/var/www/html/home/somedir我想制作一个 tar 文件,以便它复制具有位置结构的文件和文件夹。当我解压到另一个位置时,所有文件都将被复制到正确路径中各自的位置;与制作 tar 的地方相同。
当我在 Macbook 上压缩文件并在 Linux 中解压缩它们时,我反复收到以下警告/错误:
tar: Ignoring unknown extended header keyword `SCHILY.ino'
tar: Ignoring unknown extended header keyword `SCHILY.nlink'
tar: Ignoring unknown extended header keyword `SCHILY.dev'
tar: Ignoring unknown extended header keyword `SCHILY.ino'
tar: Ignoring unknown extended header keyword `SCHILY.nlink'
tar: Ignoring unknown extended header keyword `SCHILY.dev'
tar: Ignoring unknown extended header keyword `SCHILY.ino'
tar: Ignoring unknown extended header keyword `SCHILY.nlink'
tar: Ignoring unknown extended header keyword `SCHILY.dev'
tar: Ignoring unknown extended header keyword `SCHILY.ino'
tar: Ignoring unknown extended header …Run Code Online (Sandbox Code Playgroud) 我在 Windows XP 上使用 7-Zip,每当我下载 .tar.gz 文件时,我都需要两个步骤才能完全解压缩文件。
example.tar.gz文件并从上下文菜单中选择7-Zip --> Extract Here。example.tar文件并再次右键单击并从上下文菜单中选择7-Zip --> Extract Here。有没有办法通过上下文菜单一步完成此操作?