标签: large-files

每个目录的文件数

我有一个包含大约 100000 个小文件的目录(每个文件有 1-3 行,每个文件都是一个文本文件)。目录的大小不是很大(< 2GB)。这些数据存在于专业管理的 NFS 服务器中。服务器运行Linux。我认为文件系统是 ext3,但我不确定。另外,我没有对服务器的 root 访问权限。

这些文件是大规模科学实验的输出,我无法控制。但是,我必须分析结果。

此目录中的任何 I/O 操作/处理都非常非常慢。打开一个文件(python 中的 fopen),读取一个打开的文件,关闭一个文件,都非常慢。在 bash 中 ls、du 等不起作用。

问题是:

Linux 中一个目录中的最大文件数是多少,以便可以进行处理、打开、读取等操作?我知道答案取决于很多事情:fs 类型、内核版本、服务器版本、硬件等。如果可能的话,我只想要一个经验法则。

filesystems large-files

17
推荐指数
1
解决办法
1万
查看次数

Emacs:打开一个缓冲区,其中包含一个大文件中 X 到 Y 行之间的所有行

本着与另一个问题相同的精神:cat line X to line Y on a large file

有没有办法从 Emacs 中打开(并在缓冲区上显示)来自巨大文本文件的一组给定的行(例如 lineX和之间的所有行Y)?

例如,打开并在缓冲区中显示文件中第 57890000 行和 57890010 行之间的所有行 huge.txt

更新: 我对至少可以以只读方式打开行(仅用于显示目的)的解决方案感兴趣,尽管如果我也可以编辑行(并保存到原始文件)会很棒。

emacs large-files

10
推荐指数
1
解决办法
2043
查看次数

大型单行文件上的基本 sed 命令:无法重新分配内存

我有一个 250 MB 的文本文件,全部在一行中。

在这个文件中,我想ab字符替换字符:

sed -e "s/a/b/g" < one-line-250-mb.txt
Run Code Online (Sandbox Code Playgroud)

它失败了:

sed: couldn't re-allocate memory
Run Code Online (Sandbox Code Playgroud)

在我看来,这种任务可以在不分配太多内存的情况下内联执行。
是否有更好的工具,或者更好的使用方法sed


GNU sed 版本 4.2.1
Ubuntu 12.04.2 LTS
1 GB RAM

performance sed large-files text-processing out-of-memory

10
推荐指数
2
解决办法
9593
查看次数

如何在许多大文件中找到重复的行?

我有 ~30k 文件。每个文件包含约 10 万行。一行不包含空格。单个文件中的行已排序且无重复。

我的目标:我想找到两个或多个文件中的所有重复行,以及包含重复条目的文件的名称。

一个简单的解决方案是这样的:

cat *.words | sort | uniq -c | grep -v -F '1 '
Run Code Online (Sandbox Code Playgroud)

然后我会跑:

grep 'duplicated entry' *.words
Run Code Online (Sandbox Code Playgroud)

你看到更有效的方法吗?

performance large-files shell-script text-processing deduplication

10
推荐指数
2
解决办法
2万
查看次数

在 Linux 上查看大图

我需要在 Linux 上查看一个大的(50000x40000 像素)png 图像。不幸的是,大多数工具(eog、convert 等)要么崩溃要么失败,并提示内存太少。

有没有办法查看这个图像(我更喜欢看到调整大小的图像和细节)?

large-files images

9
推荐指数
1
解决办法
5636
查看次数

如何在不存储两次的情况下重新压缩 200 万个 gzip 文件?

我有大约 200 万 (60GiB) 个 gzip 小文件,我想创建一个压缩存档,其中包含所有这些文件的未压缩版本。不幸的是,我不能只是解压缩它们然后创建压缩档案,因为我只有大约 70GiB 的可用磁盘空间。换句话说,tar --file-filter="zcat" zcf file.tar.gz directory如果--file-filterGNU tar 中不存在命令行开关,我该如何做?

tar large-files compression disk-usage

9
推荐指数
2
解决办法
1768
查看次数

rsync --append 是否能够恢复中断的复制过程而不读取所有复制的数据?

我需要将同一台计算机上的一个非常大的文件 (3TB) 从一个外部驱动器复制到另一个外部驱动器。这可能需要(由于带宽较低)很多天。

因此,我想在必须中断复制并在重新启动后恢复复制时做好准备。根据我读过的内容,我可以使用

rsync --append 
Run Code Online (Sandbox Code Playgroud)

为此(rsync版本> 3)。关于国旗的两个问题--append

  1. 我是否用于rsync --append所有调用?(对于第一次调用,当目标驱动器上尚不存在中断副本时;对于后续调用,当目标驱动器上存在中断副本时。)

  2. 是否会在不读取所有已复制数据的情况rsync --append下恢复后续调用复制过程?(换句话说: rsync 是否模仿-style查找和读取操作?)dd

large-files rsync file-copy

9
推荐指数
1
解决办法
1429
查看次数

寻求具有大文件支持的替代 GUI 文件编辑器

任何人都可以推荐一个文件编辑器,最好是免费的,它可以处理大文件以及Windows 上的 EmEditor吗?我在 Ubuntu 上,但其他人可能不是,所以也欢迎对其他 Unix 操作系统的建议。

editors large-files

8
推荐指数
2
解决办法
9434
查看次数

grep 与另一个文件 (4.8Gb) 中匹配的一个文件 (3.2Gb) 中的模式

我有两个文本文件。一种是带有姓名、电子邮件地址和其他字段的文本文件。一些线路来自file1

John:myemail@gmail.com:johnson123:22hey
Erik:thatwhatsup@gmail.com:johnson133:22hey
Robert:whatsup@gmail.com:johnson123:21hey
Johnnny:bro@gmail.com:johnson123:22hey
Run Code Online (Sandbox Code Playgroud)

另一个只包含电子邮件地址。示例来自file2

1@gmail.com
rsdoge@gmail.com
mynameiscurt@hotmail.com
myemail@gmail.com
Run Code Online (Sandbox Code Playgroud)

我希望输出是每个完整的行,file1file2. 例如,myemail@gmail.comis in file2,所以我想看到以下行file1

John:myemail@gmail.com:johnson123:22hey
Run Code Online (Sandbox Code Playgroud)

有没有一种简单的方法来搜索file1和输出与“电子邮件地址列表”匹配的行file2

我一直在搜索 HOURS,但我的 Google 搜索(和 StackOverflow 搜索)以及在命令行上的努力到目前为止还没有奏效。

我尝试过并认为可行的命令:

fgrep -f file2.txt file1.txt > matched.txt
grep -F -f ....
grep -F -x -f file1 file2 > common 
Run Code Online (Sandbox Code Playgroud)

等等,但他们都得到了grep memory exhausted- 我匹配的文件是 4.8GB ( file1) 和 3.2GB ( file2,仅包含电子邮件地址)。我假设这些命令会耗尽内存。我找到了一种方法find,我想可以更顺畅地执行命令,但没有让它起作用。

tldr ; 需要匹配file2, …

linux grep large-files

8
推荐指数
3
解决办法
4912
查看次数

如何为一个巨大的文件夹创建多 tar 档案

我有一个包含 30M 小文件的大文件夹。我希望将文件夹备份成 30 个档案,每个 tar.gz 文件将有 1M 个文件。拆分成多个档案的原因是解压一个大档案需要一个月的时间。要拆分的管道 tar 也不起作用,因为在解压文件时,我必须将所有档案一起分类。

另外,我希望不要将每个文件 mv 到一个新目录,因为对于这个巨大的文件夹,即使是 ls 也是非常痛苦的。

linux filesystems tar large-files

7
推荐指数
1
解决办法
5960
查看次数