查找对于 Synology 加密共享来说太长的文件

Find files that are too long for Synology encrypted shares

在 DSM6.1 更新后尝试加密家庭共享时,我收到一条消息,提示存在文件名超过 143 个字符的文件。这是加密 Synology 共享中文件名的最大长度。

因为家庭共享中有很多东西(大部分是我自己的),手动搜索文件是不切实际的。尽管如此,这些文件 必须 被删除或重命名以允许加密共享。

我需要一种自动的方法来查找所有子目录中文件名超过 143 个字符的所有文件。使用 Windows 工具通过网络共享搜索文件可能会花费太长时间。

我自己找到了解决方案(虽然通过一些互联网研究,因为我还是一个 n00b)并想与你分享,这样有同样问题的人可能会从中受益。

就是这样:

find 函数与 grep 相结合就可以了。

find /volume1/homes/ -maxdepth 15 | grep -P '\/[^\/]{143,}[^\/]'

对于我的情况,我假设我的嵌套目录可能不超过 15 个。最大深度和起始目录可以根据您的需要进行调整。

对于 -P 参数,您可能需要安装 Perl,不过我不确定。

RegEx 匹配所有在某处具有 / 后跟除 / 以外的任何字符的 143 或更多字符且之后没有 / 的所有元素。这样我们只得到文件而没有目录。对于包含目录,您可以省略最后一个条件

RegEx 解释给可能不太熟悉的人:

  • \/ 查找正斜杠。新的 file/directory 名称从这里开始。
  • [^\/] 表示:每个字符 except /
  • {143,} 表示:前面的标记出现 143 次或更多次
  • [^\/]同上。这排除了所有不属于文件的结果。
find . -type f  -iname "*" |awk -F'/' 'length($NF)>143{print [=10=]}'

这将打印出所有名称大于143的文件。注意这里在计算长度时只考虑文件名而不是完整路径。如果你想考虑整个路径的长度:

 find . -type f  -iname "*" |awk  'length([=11=])>143{print [=11=]}'