Linux根据名称长度查找文件和文件夹,但输出完整路径

时间:2018-04-12 07:25:56

标签: linux find

我有以下文件夹结构:

System.out.println(CdShop.cdCount);

我需要查找名称长度超过x个字符的文件和文件夹。我已经能够实现这一目标:

├── longdirectorywithsillylengththatyouwouldntnormallyhave │   ├── asdasdads9ads9asd9asd89asdh9asd9asdh9asd │   └── sinlf └── shrtdir ├── nowthisisalongfile0000000000000000000000000 └── sfile

find . -exec basename '{}' ';' | egrep '^.{20,}$'

但是,这仅输出相关文件或文件夹的名称。如何输出结果匹配的完整路径,如下所示:

longdirectorywithsillylengththatyouwouldntnormallyhave
asdasdads9ads9asd9asd89asdh9asd9asdh9asd
nowthisisalongfile0000000000000000000000000

3 个答案:

答案 0 :(得分:1)

如果您对文件使用basename,则会丢失有关您实际处理的文件的信息。

因此,您必须更改正则表达式才能识别最后一个路径组件的长度。

我能想到的最简单的方法是:

find . | egrep '[^/]{20,}$' | xargs readlink -f

这利用了filenames cannot contain slashes

这一事实

结果则包含相对于您当前cwdreadlinkcan be used的路径,以便为您提供完整路径。

答案 1 :(得分:0)

我现在无法测试,但这应该可以胜任:

find $(pwd) -exec basename '{}' ';' | egrep '^.{20,}$'

答案 2 :(得分:0)

find -name "????????????????????*"  -printf "$PWD/%P\n" 

find的-printf选项非常强大。 %P:

  %P     File's name with the name of the starting-point under which it was found removed. (%p starts with ./). 

所以我们在前面加上$ PWD /。

/home/stefan/proj/mini/forum/tmp/Mo/shrtdir/nowthisisalongfile0000000000000000000000000
/home/stefan/proj/mini/forum/tmp/Mo/longdirectorywithsillylengththatyouwouldntnormallyhave
/home/stefan/proj/mini/forum/tmp/Mo/longdirectorywithsillylengththatyouwouldntnormallyhave/asdasdads9ads9asd9asd89asdh9asd9asdh9asd

为防止我们手动计算问号,我们使用:

for i in {1..20}; do echo -n "?" ; done; echo
????????????????????