Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 查找对于Synology加密共享过长的文件_Linux_Bash_Grep_Synology - Fatal编程技术网

Linux 查找对于Synology加密共享过长的文件

Linux 查找对于Synology加密共享过长的文件,linux,bash,grep,synology,Linux,Bash,Grep,Synology,在DSM6.1更新后尝试加密homes共享时,我收到一条消息,即有文件名超过143个字符的文件。这是加密的Synology共享中文件名的最大长度 因为家庭共享中有很多东西(大部分是我自己的),所以手工搜索文件是不现实的。然而,这些文件已被删除或重命名,以允许对共享进行加密 我需要一种自动的方法来查找文件名超过143个字符的所有子目录中的所有文件。使用Windows工具通过网络共享搜索文件可能会花费很长时间 我自己(通过一些互联网研究,因为我还是一名n00b)找到了解决方案,并希望与您分享,以便有

在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次或更多次
  • [^\/]
    同上。这将排除不属于某个文件的所有结果
这将打印名称大于143的所有文件。请注意,在计算长度时,这只考虑文件名而不是完整路径。如果你想考虑整个路径的长度:

 find . -type f  -iname "*" |awk  'length($0)>143{print $0}'

我在这里提出了这个问题:
 find . -type f  -iname "*" |awk  'length($0)>143{print $0}'