我需要在 90 TB 到 50 TB 的文件系统中查找最旧的文件及其关联目录,然后将它们移动到另一个文件系统。他们必须保留其目录结构,因为目录结构可以识别文件的内容。所以 -
一级/二级/三级/(文件)
是结构。我需要移动整个结构 - 顶级目录中没有任何内容,但如果没有它们,我无法识别该文件属于什么,因为我正在查找的所有文件都具有相同的名称。该过程完成后,原始文件系统中应该还剩下大约 40 TB,而新文件系统中几乎没有剩余任何内容,因为原始文件系统中最旧的文件现在都在那里。
谢谢!
答案1
使用 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/
(未经测试。-n
用于试运行。如果满意则删除)。
请注意,我们根据文件大小(%s
,替换 为%b
扇区中的磁盘使用情况(并更改为total_size += $2 * 512
)来计算累积文件大小,并忽略硬链接。当将这些文件复制到目标文件系统时,这些文件以及目录包含它们的文件最终可能会使用超过 50TB(除非有文件系统压缩或重复数据删除)。