How to use command "find" to list files with specific filename length?

4

2

In my folder I got files like

/data/filename.log /data/filename.log.1 /data/filename.log.2 /data/filenamefilenamefilename.log /data/filenamefilenamefilename.log.2

I wish to use "find" command to list out files where length is greater than 15 characters.

I have tried the following, but none of them work:

find ./ -type f -iregex "/^.*{15,1000}$/" -print
find ./ -type f -iregex "/^.*{15}$/" -print
find ./ -type f -iregex "^.*{15}$" -print
find ./ -type f -iregex ".*{15}" -print
find ./ -type f -iregex ".{15}" -print
find ./ -type f -iregex ".{15,1000}" -print

Not sure what is the correct way?

Thanks!

forestclown

Posted 2012-04-11T11:39:00.710

Reputation: 461

Answers

4

I'd suggest Paul's version if you want to match on file name only. If you want to use -regex to match on the complete path, you can do e.g.

find /data -type f -regextype posix-egrep -regex ".{15}"

or for 15 or more characters

find /data -type f -regextype posix-egrep -regex ".{15}.*"

Check the man page for the different available regexp engines to use with -regextype.


You can also use the -regex option to look for only file names at 15 characters:

find /data -type f -regextype posix-egrep -regex ".*/[^/]{15}"

or 15 or more characters:

find /data -type f -regextype posix-egrep -regex ".*[^/]{15}"

Daniel Andersson

Posted 2012-04-11T11:39:00.710

Reputation: 20 465

7

The name parameter accepts simple globbing, so the following will work:

 find . -type f -name '????????????????*'

So that is 16 question marks, followed by an asterisk. The question mark matches a single character, but it must match, so 16 of them in a row ensure that there are 16 characters in the filename. The asterisk on the end permits any additional characters, meeting the "greater than 15 characters" requirement by matching "16 or more characters".

Paul

Posted 2012-04-11T11:39:00.710

Reputation: 52 173

Actually it isn't clear whether you want the filename to be greater, or the entire path? – Paul – 2012-04-11T12:45:35.497

Thanks paul for the prompt reply and valuable feedback. I just want the filename..thanks :) – forestclown – 2012-04-12T01:41:38.420

Great. Then my approach is far simpler - it is just matching on filename. – Paul – 2012-04-12T01:51:44.707

This approach worked for me and is much simpler than defining regexptype, etc. Thanks! – Jesper Rønn-Jensen – 2013-06-19T11:31:21.543