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

Posted

技术标签:

【中文标题】Linux根据名称长度查找文件和文件夹但输出完整路径【英文标题】:Linux find files and folders based on name length but output full path 【发布时间】:2018-09-22 05:53:31 【问题描述】:

我有以下文件夹结构:

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

我需要找到名称长度超过 x 个字符的文件和文件夹。我已经能够做到这一点:

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

longdirectorywithsillylengththatyouwouldntnormallyhave
asdasdads9ads9asd9asd89asdh9asd9asdh9asd
nowthisisalongfile0000000000000000000000000

但是,这只会输出相关文件或文件夹的名称。我怎样才能像这样输出结果匹配的完整路径:

/home/user/Desktop/longdirectorywithsillylengththatyouwouldntnormallyhave
/home/user/Desktop/longdirectorywithsillylengththatyouwouldntnormallyhave/asdasdads9ads9asd9asd89asdh9asd9asdh9asd
/home/user/Desktop/shrtdir/nowthisisalongfile0000000000000000000000000

【问题讨论】:

【参考方案1】:

我现在无法对其进行测试,但这应该可以完成工作:

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

【讨论】:

谢谢,我试过了,但似乎只输出文件名。【参考方案2】:

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

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

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

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

这利用了filenames cannot contain slashes这一事实。

结果包含相对于您当前cwdreadlink 到can be used 的路径,为您提供完整路径。

【讨论】:

谢谢,这很好,似乎可以满足我的需要。出于兴趣,您知道是否有类似的东西可以在 macOS 上运行? xargs 上的 -i 标志似乎不受支持? 这里不需要-i - 我编辑了答案。这应该更便携。【参考方案3】:
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
????????????????????

【讨论】:

以上是关于Linux根据名称长度查找文件和文件夹但输出完整路径的主要内容,如果未能解决你的问题,请参考以下文章

如何使用find命令查找文件?

第3章 Linux常用命令_文件搜索命令

Linux下的查找命令whichwhereislocatefind(6/20)

根据文本文件的名称查找和替换文本文件中的单词

linux之文件查找find grep详解,以及压缩归档

Linux Bash-文件查找