我需要创建文件的压缩档案,并能够从中快速提取单个文件/目录。
问题是,例如,tar.bz2 似乎不是此类任务的最佳选择 - 在我的机器上从 200Mb 存档(50000 个文件)中提取单个 4kb 文件需要 17 秒。
是否有一些存档格式,可以从存档中快速导出单个文件(并在 linux 上工作)?
我有一些包含超过 100Gb 数据的目录。我正在尝试将它们归档到较小的卷中,即每个独立/独立的10Gb 。
问题是如果我使用tar+ split,它会导致多个不独立的 tar 部分。我不能只从其中一个部分提取文件,除非我先将所有文件合并/合并回一个大文件。
我也尝试使用tar -c -L1000M ...分割卷,但这也不起作用,并且长文件名被截断存在问题。
也尝试star过,但似乎它的拆分卷也不是独立的;而 7zip 不保留 unix 中的权限。
我希望拥有独立的拆分档案的原因是为了安全起见,如果其中一个拆分文件损坏,我仍然可以从其他档案中检索数据。如果我只想提取特定的文件/文件夹,而不需要将所有档案合并回一个大卷,它也会快得多。
我如何最好地实现这一目标?谢谢你。
找到解决方案
正如@Haxiel 的回答所建议的那样,我找到了一个使用 tar 的解决方案。答案已发布在下面。
请注意,如果它跨越卷的边界并且您没有可用的下一个卷,则可能仍有一两个文件丢失,但即使其他部分丢失,至少可以独立提取单独的卷。
如果我:
dd if=/dev/cdrom of=cdrom.iso
Run Code Online (Sandbox Code Playgroud)
那么我将始终获得与原始 CDROM 相同的完全相同的、逐位相同的图像?
或者是否有任何方法可以防止从 CDROM 复制所有位?要求在旧 CDROM 上存档旧游戏
我想将校验和信息嵌入到我传输的文件中。它是tar.gz或tar.xz文件,我只能将一个文件传输到远程端。
您如何建议我嵌入校验和信息?
我想要整个档案的校验和,而不是它的内容(我想在“解包之前”检查它的完整性)。
我知道我可以以某种支持校验和的格式(如rar)重新打包它,但是“重新打包”东西的计算成本,只是为了添加校验和(另一方面我不喜欢rar格式)。所以首选是gzip& gunzipetc 之类的东西,但用于添加、检查和删除校验和。
任何工具、想法、脚本、解决方法?
我是对的.xz并.gz支持串联吗?也许值得使用此功能在文件末尾附加压缩校验和?
我需要具有以下功能的文件存档格式
据我所知 zip、rar 和 7z 不保留所有者。
最新的 tar 格式(POSIX 1003.1-2001,pax)仍然缓慢地列出和提取文件。它似乎读取并解压缩整个存档以列出所有文件。
也许我错过了一些存档格式或使用 squashfs 之类的技巧?
我有一个包含许多文件的目录。这些文件总共占用了几 GB 的空间。我想压缩这个目录。
但是将目录压缩为单个文件会使该文件难以移动,因此我想要多个文件。
我可以使用:
tar cvzf - dir/ | split --bytes=200MB - sda1.backup.tar.gz.
Run Code Online (Sandbox Code Playgroud)
要做到这一点,但我担心我将需要所有备份文件才能恢复任何数据。我更希望每个文件都是自己的独立单元,包含源数据的一部分。
我能想到的一种方法是构建一个脚本,该脚本计算每个输入文件的大小并贪婪地将文件附加到列表中,直到达到最大大小。然后对文件列表进行 tar-ed 并开始一个新列表。重复此操作,直到所有文件都在 tars 中。然后可以独立提取焦油。
这不是其他问题的重复,因为我特别想知道如何以这样的方式执行此操作,即整个存档的每个部分本身都是一个有效的存档,并且每个文件都可以在不需要联合存档的情况下重建。
有没有做这种事情的实用程序?
使用-ror--recursive会导致rsync递归到目录。-a或--archive等于-rlptgoD,所以-a暗示-r。
如果我有目录source/并且dest/我运行:
rsync source dest\nRun Code Online (Sandbox Code Playgroud)\n\n然后rsync跳过source/并且不复制任何内容。如果我运行:
rsync -a source dest\nRun Code Online (Sandbox Code Playgroud)\n\n然后-a暗示-r并将其所有内容rsync复制到。source/dest/
但是,如果我有一个list.txt包含该行的文件source,并且我的目录的完整路径source/是/home/user/source/,并且我运行:
rsync -a --files-from=list.txt /home/user/ dest\nRun Code Online (Sandbox Code Playgroud)\n\n那么rsync只复制source/到dest/但不复制其内容。如果我运行不带选项的命令,也会发生同样的情况-a。
但是如果我运行相同的命令-r:
rsync …Run Code Online (Sandbox Code Playgroud) 我正在寻找一个归档程序,为归档增加冗余。
示例:我有 500MB 的数据和 700MB 的媒体来刻录它。与其浪费 200MB,我想用它们来增加冗余。然后,如果某些数据损坏,归档程序将能够恢复它,因为它是多余的。
有这样的程序吗?你会推荐哪一个?如果可能,请使用 FOSS 软件:如果您没有存档器源代码,您不知道将来是否能够提取存档。
我有.gz像BIG5.gz. 我想把这个.gz文件gunzip到目录中BIG5。
这不起作用:
gunzip -c BIG5.gz > /BIG5
Run Code Online (Sandbox Code Playgroud) 我有一个 20GB RAR 文件需要在 Debian Linux Google Cloud VM 上使用密码进行解压。
我第一次尝试sudo apt-get install unrar,但给出了以下输出:
Reading package lists... Done
Building dependency tree
Reading state information... Done
Package unrar is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source
E: Package 'unrar' has no installation candidate
Run Code Online (Sandbox Code Playgroud)
我发现这很可能是因为我没有激活多元宇宙,所以我尝试了一下sudo add-apt-repository multiverse。这不起作用:
Error: 'multiverse' invalid
Run Code Online (Sandbox Code Playgroud)
我最终发现一个帖子说可以安装“unrar free”。我安装了它,然后运行unrar-free -x -p Filename.rar。它当前正在检查存档中的每个文件并给出以下输出:
Extracting …Run Code Online (Sandbox Code Playgroud) archive ×10
tar ×4
backup ×3
compression ×2
linux ×2
checksum ×1
command-line ×1
data-cd ×1
dd ×1
debian ×1
files ×1
gzip ×1
options ×1
packaging ×1
rar ×1
redundancy ×1
rsync ×1
software-rec ×1
split ×1
zip ×1