[mdlug] How to find file name length?
Aaron Kulkis
akulkis3 at hotpop.com
Wed Sep 26 19:17:35 EDT 2007
Raymond McLaughlin wrote:
> Michael Corral wrote:
>
>> 2007-09-26, Monsieur Raymond McLaughlin a ecrit:
>>
>>> Paul wrote:
>>>
>>>> Well, this is almost perverse (and probably slow), but
>>>> this invokation will tell you all the files greater than 99
>>>> characters long (in theory):
>>>>
>>>> #> find / -type f -exec bash -c 'echo "$(basename "{}" | wc -c) {}" ' \;
>>>> | egrep '^1[0-9]{2}'
>>>>
>>> Actually "egrep '^1[0-9]{2}'" only filters for numbers 100-199. A more
>>> general construct: "egrep '[0-9]{3,}'" will find all numbers of three or
>>> more digits. Don't some filesystems allow for filenames of 255 or more
>>> characters?
>>>
>> Well, even that would exclude filenames of length 100, 101, 102 and
>> 103, which the original poster said were valid lengths.
>>
>
> Oh? I tested the egrep statement thus:
> pts/1 $ for ((i=1; i<216; ++i)); do echo $i; done | \
> egrep '[0-9]{3,}'
> 100
> 101
> 102
> 103
> 104
> 105
> <snip>
> 212
> 213
> 214
> 215
>
> How are 100-103 excluded?
>
> Also did any one notice that the "echo "$(basename "{}" | wc -c" part
> doesn't work as intended? Observe:
>
> echo filename.txt | wc -c
> 13
>
> wc counts the trailing new line as a character, you need to use "echo -n"
>
> echo -n filename.txt | wc -c
> 12
>
Good work, Ray
More information about the mdlug
mailing list