在最大 50 TB 的文件系统中查找最旧的文件/目录

J T*_*lep 8 linux find

我需要在高达 50 TB 的 90 TB 文件系统中找到最旧的文件及其关联目录,然后将它们移动到另一个文件系统。他们必须保留他们的目录结构,因为这是识别文件的内容。所以 -

一级/二级/三级/(文件)

是结构。我需要移动整个结构 - 顶级目录中没有任何内容,但没有它们,我无法确定文件属于什么,因为我正在寻找的所有文件都具有相同的名称。该过程完成后,我应该在原始文件系统中剩下大约 40 TB 的空间,而新文件系统中几乎没有任何剩余空间,因为原始文件中最旧的文件现在已经存在了。

谢谢!

Sté*_*las 9

使用 GNU 工具和rsync,您可以执行以下操作:

export LC_ALL=C # force tools to regard those file paths as arrays
                # of bytes (as they are in effect) and not do fancy
                # sorting (and use English for error/warning messages 
                # as an undesired side effect).

find . -type f -printf '%T@/%s/%p\0' | # print mtime/size/path
  sort -zn | # numerical sort, oldest first
  awk -v RS='\0' -v ORS='\0' -F / -v max=50e12 '
    {total_size += $2}
    total_size > max {exit}
    {
      sub("^[^/]*/[^/]*/", "") # remove mtime/size/
      print # path
    }' |
  rsync -nv -aHAX0 --files-from=- --remove-source-files . /dest/dir/
Run Code Online (Sandbox Code Playgroud)

(未经测试。-n用于试运行。如果满意,请删除)。

请注意,我们正在计算基于文件大小的累积文件大小(%s,替换%b为扇区中的磁盘使用情况(并更改为total_size += $2 * 512)并忽略硬链接。这些文件,当复制到目标文件系统时,连同目录包含它们的最终可能会使用超过 50TB(除非有文件系统压缩或重复数据删除)。