Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File 将大量文件拆分为子目录_File_Architecture_Directory - Fatal编程技术网

File 将大量文件拆分为子目录

File 将大量文件拆分为子目录,file,architecture,directory,File,Architecture,Directory,我有数千个pdf文件,大部分是通过编程访问的。它们是学术文件,名称以)开头,如下所示: Johns1.2000a.pdf 从编程相关程序的角度来看,如果所有这些文件都在一个目录中,则更容易 但是,当我偶尔在GUI文件浏览器上手动打开这些文件时,目录太大,文件浏览器的响应变得很慢。因此,我将文件分为以文件名首字母命名的子目录(即,文件Johns….pdf进入子目录J,等等)。但是 我不知道这样做是否有意义 而且这种方法也有问题 首先,文件名相对于首字母的分布不均匀;有些信件以它开头的文件较

我有数千个pdf文件,大部分是通过编程访问的。它们是学术文件,名称以
)开头,如下所示:

Johns1.2000a.pdf
从编程相关程序的角度来看,如果所有这些文件都在一个目录中,则更容易

但是,当我偶尔在GUI文件浏览器上手动打开这些文件时,目录太大,文件浏览器的响应变得很慢。因此,我将文件分为以文件名首字母命名的子目录(即,文件
Johns….pdf
进入子目录
J
,等等)。但是

  • 我不知道这样做是否有意义
而且这种方法也有问题

  • 首先,文件名相对于首字母的分布不均匀;有些信件以它开头的文件较多,有些则较少
  • 其次,如果文件集合增加,每个子目录都会变得太大,我将不得不进入另一个级别,如
    AA
    AB
    ,…,这
    • 是任意的和特别的(每当我觉得子目录变得太大时,我必须手动添加一个级别),并且
    • 不平衡的分布将变得更糟(例如,目录
      QQ
      中几乎没有任何文件,但在
      KA
      中有很多文件)
在这种情况下,

  • 创建子目录有意义吗?我只是偶尔手动访问文件,所以我可以忍受文件浏览器上的缓慢响应。从其他角度来看,这样做有什么好处吗
  • 如果创建su目录是有意义的,那么有没有一种方法不会出现上述问题

  • 小心:我只是在胡思乱想。这只针对你的问题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
      的子目录都可以删除。或者,每个目录可以包含一个文件,其中包含其直接子目录中文件总数的计数,该计数将在添加或删除文件时更新。当计数器归零时,可以删除子目录

    以下是几点观察:

    • 这显然要求计算散列码的算法在将来不会改变。如果可能发生这种情况,可以使用自定义哈希代码方法

    • 我假设散列码绝对值的前几个数字几乎是随机分布的,但如果不是,散列码的最后几个数字肯定是随机分布的


    这主要解决了分布不均匀的问题(如果过程可以自动化,则会降低成本)。一个(次要)问题是,它不能直观地手动访问。但也许我期望太高了。我希望在你实现解决方案后,在将来看到这个问题的更新。