File 将大量文件拆分为子目录
我有数千个pdf文件,大部分是通过编程访问的。它们是学术文件,名称以File 将大量文件拆分为子目录,file,architecture,directory,File,Architecture,Directory,我有数千个pdf文件,大部分是通过编程访问的。它们是学术文件,名称以)开头,如下所示: Johns1.2000a.pdf 从编程相关程序的角度来看,如果所有这些文件都在一个目录中,则更容易 但是,当我偶尔在GUI文件浏览器上手动打开这些文件时,目录太大,文件浏览器的响应变得很慢。因此,我将文件分为以文件名首字母命名的子目录(即,文件Johns….pdf进入子目录J,等等)。但是 我不知道这样做是否有意义 而且这种方法也有问题 首先,文件名相对于首字母的分布不均匀;有些信件以它开头的文件较
)开头,如下所示:
Johns1.2000a.pdf
从编程相关程序的角度来看,如果所有这些文件都在一个目录中,则更容易
但是,当我偶尔在GUI文件浏览器上手动打开这些文件时,目录太大,文件浏览器的响应变得很慢。因此,我将文件分为以文件名首字母命名的子目录(即,文件Johns….pdf
进入子目录J
,等等)。但是
- 我不知道这样做是否有意义
- 首先,文件名相对于首字母的分布不均匀;有些信件以它开头的文件较多,有些则较少
- 其次,如果文件集合增加,每个子目录都会变得太大,我将不得不进入另一个级别,如
,AA
,…,这AB
- 是任意的和特别的(每当我觉得子目录变得太大时,我必须手动添加一个级别),并且
- 不平衡的分布将变得更糟(例如,目录
中几乎没有任何文件,但在QQ
中有很多文件)KA
小心:我只是在胡思乱想。这只针对你的问题2 假设您将每个文件名映射到其哈希代码中,并根据哈希代码将文件存储在目录结构中?比如说,
str = "Johns1.2000a.pdf"
str.hash.abs.to_s.chars
#=> ["5", "2", "2", "1", "9", "8", "0", "3", "1",
# "6", "9", "8", "3", "0", "8", "1", "5", "2"]
所以这个文件可能存储为
/5/2/2/Johns1.2000a.pdf
您可以采用以下规则:
- 最初创建目录
,/1
,…,/2
,并根据散列码绝对值的第一位数字将文件添加到这些目录中/9
- 保存文件时,如果子目录
已经包含d
文件(N
是一个参数),请创建子目录N
,/0
,/1
,…,/2
,并根据其哈希代码将/9
中的每个文件移动到相应的子目录。在上面的示例中,文件d
将从Johns1.2000a.pdf
移动到/5/2/2/Johns1.2000a.pdf
/5/2/2/1/Johns1.2000a.pdf
- 要检索文件,请根据文件的哈希代码向下搜索到最后一个子目录
- 您可以定期遍历该树,查看上一级的子目录
是否只包含空的子目录,在这种情况下,d
的子目录都可以删除。或者,每个目录可以包含一个文件,其中包含其直接子目录中文件总数的计数,该计数将在添加或删除文件时更新。当计数器归零时,可以删除子目录d
- 这显然要求计算散列码的算法在将来不会改变。如果可能发生这种情况,可以使用自定义哈希代码方法
- 我假设散列码绝对值的前几个数字几乎是随机分布的,但如果不是,散列码的最后几个数字肯定是随机分布的