查找对于 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=]}'
在 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=]}'