在DSM6.1更新后尝试加密家庭共享时,我收到一条消息,指出文件名长度超过143个字符的文件。这是加密的Synology共享中文件名的最大长度。
因为家庭共享中有很多东西(主要是我自己的),手工搜索文件是不切实际的。然而,这些文件已被删除或重命名以允许加密共享。
我需要一种自动方式来查找文件名长度超过143个字符的所有子目录中的所有文件。使用Windows工具通过网络共享搜索文件可能会花费太长时间。
我自己已经找到了解决方案(虽然有一些互联网研究,因为我仍然是n00b)并想与你分享,所以有同样问题的人可能会从中受益。
答案 0 :(得分:3)
所以这就是:
find
功能与grep
相结合可以解决问题。
find /volume1/homes/ -maxdepth 15 | grep -P '\/[^\/]{143,}[^\/]'
对于我的情况,我假设我可能没有超过15个嵌套目录。最大深度和起始目录可以根据您的需要进行调整。
对于-P
参数,您可能需要安装Perl,但我不确定。
RegEx会匹配/
某个地方的所有元素,其后跟/
以外的任何字符中的143个或更多字符,之后没有/
。通过这个我们只获取文件,没有目录。对于包含目录,您可以省略最后一个条件
RegEx向那些可能不太熟悉的人解释:
\/
寻找正斜杠。新文件/目录名称从此处开始。[^\/]
表示:每个字符除 /
{143,}
表示:前一个令牌发生143次或更多次[^\/]
与上述相同。这会排除所有不属于文件的结果。答案 1 :(得分:0)
find . -type f -iname "*" |awk -F'/' 'length($NF)<=143{print $0}'
这将打印名称小于或等于143的所有文件。请注意,在计算长度时,这仅考虑文件名而不是完整路径。如果你想考虑整个路径的长度:
find . -type f -iname "*" |awk 'length($0)<=143{print $0}'