我有几个 ZIP 和 RAR 存档,其中存档内的文件名被打乱,并且它们包含无效的文件系统字符,例如 ?-s *-s 或 !-s 或很长的文件和目录名称,这些名称会混淆常用的存档工具,或者它们根本无法创建文件。由于只有内容很重要,我只想将这些档案中的文件提取到平面结构中的单个目录中,使用通用名称,如 file0、file1、file2 等……最简单的方法是什么?
尝试制作tar.gz文件失败后,我无法解压缩文件。似乎我已经失去了它,但这看起来像是一个应该能够从中恢复的微不足道的错误。文件内容真的丢失了吗?我已经试过的各种tar与unzip没有成功的组合。
操作系统环境和tar版本:
$cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)
$tar --version |grep tar
tar (GNU tar) 1.26
Run Code Online (Sandbox Code Playgroud)
重现步骤:
[weshop@demo test]$ ls
file.txt
[filip@demo test]$ cat file.txt
hello
[filip@demo test]$ tar cvzf file.txt file.tar.gz
tar: file.tar.gz: Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors
[filip@demo test]$ cat file.txt
?Om7??7??'([filip@demo test]$
[filip@demo test]$ tar xvzf file.txt
[filip@demo test]$ cat file.txt
?Om7??7??'([filip@
[filip@demo test]$ file file.txt
file.txt: gzip compressed …Run Code Online (Sandbox Code Playgroud) 我想知道在 linux 文件系统中是否有支持每个文件的存档位
https://en.m.wikipedia.org/wiki/Archive_bit
我需要在本机 fs 中具有相同逻辑的东西,例如 ext3,既不胖也不 ntfs。
我可以在不解压缩的情况下检查存档的完整性吗,因为存档是 64GB。这是我旧笔记本电脑的备份,在我格式化旧笔记本电脑之前,我想验证备份,但解压缩和验证需要很长时间。那么有没有更快的方法呢?
在 Windows 中,默认情况下可以看到 zip 文件的压缩率,安装 WinRAR 后,它也支持此功能,但目前我使用的是 linux 并使用 lzma2 和 xz 作为容器压缩了一个文件,但如何在没有的情况下检查压缩率比较原始文件大小和压缩文件大小?甚至有可能吗?
使用 创建 7zip 存档时file-roller,会有一个标记为“也加密文件列表”的复选框。它似乎可以工作,因为在打开勾选此复选框创建的存档时,您无法看到文件列表,直到您输入密码(打开存档时会立即提示您输入密码),而您可以看到文件列表,并且只会出现提示尝试访问存档中的文件时输入密码。
从7zip的手册页中,我知道可以通过传递开关来创建加密存档p。但这些档案的文件列表未加密。
从命令行创建 7zip 存档时如何对其文件列表进行加密?
如何检查文件是否为存档,然后使用7z. 我知道我可以通过file命令检查它,但由于它的输出,它在脚本中不起作用。我无法预测它可能是什么类型的存档。我只想做这样的事情:
我可以通过7z提取它吗?
如果是,提取,
如果不是,进一步
通过 bash 脚本。
我正在处理大数据,我需要归档一个大于 64 TB 的目录。我无法在我的文件系统上创建这么大的文件(存档)。不幸的是,所有提议的在 Linux 上创建多部分存档的解决方案都建议先创建一个存档,然后使用split命令将其拆分为较小的文件。
我知道 fe 7zip 是可能的,但不幸的是,我不得不使用 RedHat 6 中内置的工具 - tar、gzip、bzip2 ...
我想知道创建一个脚本来询问用户的最大音量大小。它会用 gzip 归档每个文件,拆分那些太大的文件,然后手动将它们合并到许多具有所选大小的 tars 中。这是一个好主意吗?
有没有其他可能用基本的 Linux 命令来实现大档案划分?
更新:
我已经在限制最大文件大小的文件系统上测试了该解决方案并且它有效。将tar输出直接重定向到split命令的管道已按预期工作:
tar -czf - HugeDirectory | split --bytes=100GB - MyArchive.tgz.
创建的文件已经很小,将它们合并在一起时不会创建超大文件:
cat MyArchive.tgz* | tar -xzf -
我有很多 rar 文件
- Folder/
--- Spain.rar
--- Germany.rar
--- Italy.rar
Run Code Online (Sandbox Code Playgroud)
所有文件都不包含根文件夹,所以它只是文件。
提取时我想实现的是这种结构:
- Folder/
-- Spain/
---- Spain_file1.txt
---- Spain_file2.txt
-- Germany/
---- Germany_file1.txt
---- Germany_file2.txt
-- Italy/
---- Italy_file1.txt
---- Italy_file2.txt
Run Code Online (Sandbox Code Playgroud)
这样就创建了一个具有存档名称的文件夹,并将存档解压缩到其中。
我在另一个线程中找到了这个 bash 示例,但它对我不起作用,它试图创建一个以所有文件为名称的文件夹。
#!/bin/bash
for archive in "$(find . -name '*.rar')"; do
destination="${archive%.rar}"
if [ ! -d "$destination" ] ; then mkdir "$destination"; fi
unrar e "$archive" "$destination"
done
Run Code Online (Sandbox Code Playgroud)
任何想法我怎么能做到这一点?
假设我创建了 100 个文件,每个文件的大小为 30MB 的随机文本数据。现在我创建一个压缩率为 0 的 zip 存档,即zip dataset.zip -r -0 *.txt. 现在我只想从这个存档中提取一个文件。
如上所述这里,也有解压/从归档中提取文件的方法有两种:
O(1)复杂度)O(n)复杂性)unzip 使用哪种方法?从我的实验来看,它似乎使用了方法 2?
archive ×10
tar ×4
7z ×2
compression ×2
shell-script ×2
xz ×2
filenames ×1
files ×1
filesystems ×1
gzip ×1
integrity ×1
rar ×1
rhel ×1
scripting ×1
zip ×1