查找Synology加密共享文件太长

时间:2017-03-21 21:42:26

标签: linux bash grep synology

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

因为家庭共享中有很多东西(主要是我自己的),手工搜索文件是不切实际的。然而,这些文件被删除或重命名以允许加密共享。

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

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

2 个答案:

答案 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}'