浏览超过 100000 张图片的文件夹

use*_*005 8 filemanager 14.04

我有一个文件夹,里面有 322000 张图片。当我使用任何文件管理器访问该文件夹时,它会卡在加载中。

我如何去那里查看或删除图像?

Jac*_*ijm 5

自动将您的文件划分到一个(递归)目录中,每个(子)文件夹/每个上级文件夹的文件夹具有任意数量的文件

最简单和恕我直言最有效的方法是让脚本将文件重新组织到文件夹中,如有必要,甚至是不同的目录级别层。这将使您的文件可浏览而不会阻塞 nautilus。

下面的脚本将为您做到这一点。它将创建包含任意数量文件的文件夹。如果这些文件夹超过(相同的)任意数量等,这些文件夹将被组织成子文件夹。每个(子)级别将具有相同的最大文件数/子目录,从而使浏览变得容易。

每个创建的文件夹显示文件夹编号 + 创建的子级别数(例如 22_1 仅包含文件):

在此处输入图片说明

考试

我在一个包含 300.000 个文件的目录中进行了测试,以(最多)100 个文件的块重新组织,组织到(最多)100 个文件夹等的上级目录中
。在我的系统上花了不到一分钟的时间。将 100.000 个文件分成更小的块进行测试只需几秒钟。

剧本

#!/usr/bin/env python3
import subprocess
import os
import shutil

#--- set the directory to reorganize below
dr = "/path/to/directory"
#--- set the number of files/folders per level
size = 100

level = 0
def move(fn, drn, level):
    folder = dr+"/"+str(drn)+"_"+str(level)
    if not os.path.exists(folder):
        os.mkdir(folder)
    shutil.move(dr+"/"+f, folder+"/"+f)

while len(os.listdir(dr)) > size:
    level += 1
    fn = 0; drn = 1
    for f in os.listdir(dr):
        if fn < size:
            move(fn, drn, level)
        else:
            fn = 0
            drn += 1
            move(fn, drn, level)
        fn += 1
Run Code Online (Sandbox Code Playgroud)

如何使用

  1. 将脚本复制到一个空文件夹中,另存为 reorganize.py
  2. 在 head 部分,设置目录的路径,每个子目录所需的文件数(= 等于每个包含目录的文件夹)。
  3. 通过以下命令运行它:

    python3 /path/to/reorganize.py
    
    Run Code Online (Sandbox Code Playgroud)

笔记

脚本(按原样)只是创建一个目录结构,其中每个级别都有定义数量的文件/文件夹。它不考虑名称、日期或其他任何类型的组织。


编辑

根据评论中的要求,在处理文件后将文件移回一个平面目录的脚本。
用法几乎相同。作为目录,设置与第一个脚本相同的目录,但这似乎很明显。

python3 /path/to/reorganize.py
Run Code Online (Sandbox Code Playgroud)

笔记

正如评论中提到的,脚本假定没有名称冲突的风险,因为所有文件最初都来自同一个(平面)目录。