我一直试图在我的 linux 服务器上节省空间,我有一个文件夹,在子文件夹中包含 22GB 的图像。
所以我决定压缩它们。
首先我使用焦油:
tar -zcf folder.tar folder
Run Code Online (Sandbox Code Playgroud)
然后gzip
gzip folder
Run Code Online (Sandbox Code Playgroud)
最后,为了以防万一,bzip2
bzip2 folder
Run Code Online (Sandbox Code Playgroud)
毕竟,所有folder.tar.gz.bzip2
s的总数仍然是 22GB!使用更精细的精度,节省 1% 的空间!
我在这里做错了吗?我希望能节省 1% 以上的费用!
我还能如何压缩文件?
我有一个.tar.xz
包含日志文件的大型压缩文件。压缩率很好——但压缩时间很长,如果我想添加额外的日志文件,我必须解压,添加新文件,然后重新压缩——这需要更长的时间并用完很多磁盘空间。
是否有一种存档/压缩方法可以让我有效地将新文件添加到现有存档中,同时仍保留可靠压缩的好处?(即不单独压缩文件,这是什么.zip
)。
是否有压缩 STDIN 并输出到 STDOUT 的工具?该工具(或其对应工具)也应该能够解压。简单的东西很好,但它必须是无损的。
我有一个.gz
名为 file.txt 的document.txt.gz
文件。它应该是一个被压缩为 gzip 文件的文本文件。当我解压缩时,我得到一个损坏的文件。
我运行了以下命令:
$ file document.txt.gz
Run Code Online (Sandbox Code Playgroud)
结果是
document.txt.gz: gzip compressed data, max speed, from FAT filesystem (MS-DOS, OS/2, NT)
Run Code Online (Sandbox Code Playgroud)
我再次在解压缩的部分上运行文件命令
$ file document.txt.gz
Run Code Online (Sandbox Code Playgroud)
结果是
document.txt: gzip compressed data, last modified: Mon Mar 12 22:16:42 2018, from Unix
Run Code Online (Sandbox Code Playgroud)
我不确定为什么我的未压缩文件仍然是 gzip 压缩数据。
有没有办法找回原始文件?
我有 4 个文件,我想将它们包含在.zip文件中。
drwxr-xr-x 7 skemelio themelis 4,0K ??? 18 00:21 CSharp
drwxr-xr-x 11 skemelio themelis 4,0K ??? 18 00:17 gnome-games
drwxr-xr-x 8 skemelio themelis 4,0K ??? 18 00:17 gnome-music
drwxr-xr-x 4 skemelio themelis 4,0K ??? 18 00:18 Test
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,它们的大小总共为 16K。
我正在使用下面的命令创建 zip:
zip -r myfiles.zip *
Run Code Online (Sandbox Code Playgroud)
该文件已成功创建,但现在其大小为20M,如下所示!
drwxr-xr-x 7 skemelio themelis 4,0K ??? 18 00:21 CSharp
drwxr-xr-x 11 skemelio themelis 4,0K ??? 18 00:17 gnome-games
drwxr-xr-x 8 skemelio themelis 4,0K ??? 18 00:17 gnome-music …
Run Code Online (Sandbox Code Playgroud) 我正在使用 GNU 生成 3 TB 驱动器映像ddrescue
,并意识到它对于目标驱动器来说太大了(因为空白空间填充了 0xAA 而不是 0x00,所以我没有使用稀疏输出文件,而是需要实际压缩)。
输出文件在 btrfs 文件系统上,它支持按文件压缩,但通过哪种方法?
要将压缩应用于现有文件,请使用命令,其中 是,或。例如,要使用 zstd 重新压缩整个文件系统,请运行以下命令:
btrfs filesystem defragment -calg
alg
zlib
lzo
zstd
Run Code Online (Sandbox Code Playgroud)# btrfs filesystem defragment -r -v -czstd /
这会重新压缩现有文件,但似乎是针对文件文件夹,而不是单个文件?
提示:也可以在不使用
compress
挂载选项的情况下为每个文件启用压缩;这样做适用chattr +c
于文件。当应用于目录时,它将导致新文件在出现时自动压缩。
不过,目前尚不清楚这是否会重新压缩现有文件。
在文件上设置压缩属性 using
btrfs property set <file> compression <zlib|lzo|zstd>
将 强制使用指定算法在该文件上使用压缩。
这似乎是为了强制压缩通常不会被压缩的文件,因为它们包含不是很可压缩的数据?
我想将整个现有文件转换为(默认 LZO)压缩,并继续压缩将来写入其中的任何数据,而不更改卷上其他文件的压缩?
我喜欢使用 squashfs 进行压缩,因为将它们安装为循环设备来访问内部文件很简单。
我有很多 rar、tgz 和 zip 文件,我想将它们转换为 squashfs。
在这个答案中,我看到在将磁盘映像压缩到squashfs时可以使用伪文件以避免必须使用整个磁盘大小的临时文件。
mkdir empty-dir
mksquashfs empty-dir squash.img -p 'sda_backup.img f 444 root root dd if=/dev/sda bs=4M'
Run Code Online (Sandbox Code Playgroud)
我想使用伪文件以相同的方式(即时)从 rar、tgz 或 zip 转换为 squashfs,因此我不必首先将整个存档提取到磁盘,然后在单独的操作中压缩到 squashfs 。
其中一些档案包含数千个单独的文件,其中一些文件的文件名中包含空格或其他特殊字符。
我查看了README,我认为我需要使用该-pf <pseudo-file>
选项,但我不确定如何动态创建伪文件(并且也不存在带空格的文件名问题)。我想我需要使用进程替换来从源存档创建文件列表。
理想情况下,我希望有一个命令能够转换任何 rar、tgz 或 zip,而不必为每个存档单独创建伪文件,但如果有人可以告诉我如何使用其中一种存档格式来完成此操作,那么希望我能为其他人解决这个问题。
感谢大家。
使用 tar v1.26 时无法选择压缩程序。
虽然这有效
tar -c -I 'xz' -f foo.tar.xz *
Run Code Online (Sandbox Code Playgroud)
这是行不通的:
tar -c -I 'xz -T0' -f foo.tar.xz *
tar (child): xz -T0: Cannot exec: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now
Run Code Online (Sandbox Code Playgroud)
你有什么想法?
我有一个无法更改的应用程序,它写入一个 250 GB 的大纯文本文件。用 GZ 压缩后只有 30 GB。
这个应用程序没有压缩它的输出的选项,它只能写入文件名(而不是标准输出)。
有没有一种方法可以设置立即压缩输出,而无需先将 250 GB 的文件存储在我的磁盘上?
我还需要另一种方式来欺骗应用程序,以便它读取实际上是压缩的纯文本文件。
我.csv
从 OECD Stats 网站下载了一些文件,因为我需要它们用gnuplot
. 当我使用 File Roller 3.4.1(处理存档文件的默认程序)打开它们时,有一个文件似乎是空的(0 字节)。当我在终端上尝试时,我得到:
gunzip Financial\ Indicators\ –\ Stocks.gz
gzip: Financial Indicators – Stocks.gz: invalid compressed data--length error
gzip: Financial Indicators – Stocks.gz has more than one entry -- unchanged
Run Code Online (Sandbox Code Playgroud)
所以该文件似乎已损坏,但我将其发送给使用 Windows 的朋友。他在他的计算机上解压缩了文件并将输出发送给我:它是一个 zip 文件,其中包含两个.csv
文件。所以文件没有损坏,肯定是用来处理它们的包有问题。有什么建议吗?