Linux 查找对于Synology加密共享过长的文件
在DSM6.1更新后尝试加密homes共享时,我收到一条消息,即有文件名超过143个字符的文件。这是加密的Synology共享中文件名的最大长度 因为家庭共享中有很多东西(大部分是我自己的),所以手工搜索文件是不现实的。然而,这些文件已被删除或重命名,以允许对共享进行加密 我需要一种自动的方法来查找文件名超过143个字符的所有子目录中的所有文件。使用Windows工具通过网络共享搜索文件可能会花费很长时间 我自己(通过一些互联网研究,因为我还是一名n00b)找到了解决方案,并希望与您分享,以便有同样问题的人可以从中受益。因此,我想:Linux 查找对于Synology加密共享过长的文件,linux,bash,grep,synology,Linux,Bash,Grep,Synology,在DSM6.1更新后尝试加密homes共享时,我收到一条消息,即有文件名超过143个字符的文件。这是加密的Synology共享中文件名的最大长度 因为家庭共享中有很多东西(大部分是我自己的),所以手工搜索文件是不现实的。然而,这些文件已被删除或重命名,以允许对共享进行加密 我需要一种自动的方法来查找文件名超过143个字符的所有子目录中的所有文件。使用Windows工具通过网络共享搜索文件可能会花费很长时间 我自己(通过一些互联网研究,因为我还是一名n00b)找到了解决方案,并希望与您分享,以便有
find
函数与grep
结合使用就可以实现这一点
find /volume1/homes/ -maxdepth 15 | grep -P '\/[^\/]{143,}[^\/]'
在我的例子中,我假设我可能没有超过15个嵌套目录。最大深度和起始目录可以根据您的需要进行调整
对于-p
参数,您可能需要安装Perl,但我不确定这一点
正则表达式匹配所有元素,这些元素在某个地方有一个/
,后跟143个或更多除/
以外的任何字符,并且之后没有/
。这样我们只得到文件,没有目录。对于包含目录,可以省略最后一个条件
RegEx为可能不太熟悉这一点的人解释道:
查找正斜杠。新的文件/目录名从这里开始\/
表示:除[^\/]
/
{143,}
表示:前面标记出现143次或更多次[^\/]
同上。这将排除不属于某个文件的所有结果 find . -type f -iname "*" |awk 'length($0)>143{print $0}'
我在这里提出了这个问题:
find . -type f -iname "*" |awk 'length($0)>143{print $0}'