我有一个上传文件的networking服务器。 有一个脚本将其分配给数字ID并将其存储在相应的子目录中。
我现在已经有了32000个这样的上传文件,这对于服务器在一个目录中处理太多了。 我正在使用的脚本确实有一种“命名空间”上传的方式,因此ID 12345(而不是坐在/files/12345 )将位于/files/namespaced/000/012/345 。
代码可以处理这个很好,但我现在有32000个子目录在错误的命名风格。 什么是最简单的方法来通过我现有的文件,把他们在正确的地方?
这假定目录名称在其名称中没有任何奇怪的字符(如空格或换行符),并且没有以点开头的文件名。
未经testing。
find /files -type d | while read -r dir do base="000000${dir##*/}" new="/files/namespaced/${base: -9:3}/${base: -6:3}/${base: -3}" mkdir -p "$new" mv "$dir/*" "$new" rmdir "$dir" done
另一种获取新目录名的方法:
new=$(echo "$dir" | sed 's|...$|/&|;s|\(.*\)/\(.*\)/\(...\)$|\1/namespaced/000000\2/\3|; s|\(.*\)/.*\(...\)\(...\)/\(...\)$|\1/\2/\3/\4|' "$dir")