fnumfilt - an image list processor

Version 1.2

Download: fnumfilt.tgz (20061001)

fnumfilt is a linux/posix tool that helps me processing lists of images made with my digital camera.

The images of my cam have the format "r<7-digits>.jpg". Often I want to process just some of the images. With fnumfilt, I can filter number ranges extracted from the filenames, and print resulting lists or execute a tool like convert (ImageMagick) to easily create thumbnails.

The following three chapters are the output of fnumfilt -C, fnumfilt -h and fnumfilt -H. I hope they help you deciding whether this's a tool for you.

Numfilt is GPL software. You're free to use it. But you use it on your own risk.

If you want to contact me, please write to

Changes (fnumfilt -C):

Change history of program fnumfilt V1.2:

              Renamed program to 'fnumfilt', because there's another numfilt out there.
              Changed -x to always print the executed command.
              Fixed conflict in -o/-x. -x is now independent.


              Added option "-x" to make fnumfilt execute the output ("-O") as shell command.
              Added option "-C" to show the changes history.
              Added version variable.
              Added many comment lines.


              Coded the program. Extensive testing. Release.


              Had the idea and began to code.

Usage (fnumfilt -h):

fnumfilt V1.2 (C) by T.Kloppenburg, released under the GPL

  [-h]                 : this help
  [-H]                 : more help (examples) -> fnumfilt -H | less -S
  [-C]                 : show change history of the program.
  -r "5-40 -15-201 18" : set number range
  [-i <file>]          : read filenames from file (default: stdin)
  [-I x%07d.jpg]       : set input format to x + 7 digits + .jpg (default: any digits)
  -o <file>            : output result into file (default: stdout)  
  -O "formatstring"    : output data string (...)
                         Placeholders: %FNAME %FPATH $PATH %NUM %COUNT
  -J %07d              : number format for -O, %07d = 7 digits, leading zeros.

  -c                   : generate faked filenames: count in range_min..range_max
  [-n <int>]           : set offset for %COUNT (see -O "formatstring")

  -a                   : print all lines (good in some special cases, see -H page)
  -d                   : print informative debug messaged  
  -x                   : execute command given with -O "formatstring". Dangerous!!!
                         USE IT ON YOUR OWN RISK! BE CAREFUL!

More help (fnumfilt -H):

  This is the "more help" page :).
  Some examples for fun and profit:
  1. We have made thousands of photos with our digicam. They
     are in /data/digicam/20040429/. They look like "r0001324.jpg".
     We want to have convert command calls to generate thumbnails
     of photo 0001324-0001350, but not the photos 0001340 to
     0001345 (aunt mary!).
     # ls /data/digicam/20040429/*jpg | 
             ./fnumfilt -r "1324-1350 -1340-1345" -I "r%d.jpg"
                   -O "convert -scale 120x %FPATH thumbs/th_%FNAME"
     this will generate a list if lines like:
       convert -scale 120x /data./../r0001324.jpg thumbs/th_r0001324.jpg
     but no lines for r0001340.jpg up to r0001345.jpg !
  2. You have hundreds of thumbnail files and you want to have a simple
     index web page with links to the big images. But not number
     1201-1205 (you, naked!):
     ls /data/thumbs/*jpg | fnumfilt -r "-1201-1205"
       -O "<a href="/gfx/%FNAME"><img src="/thumbs/th_%FNAME"></a><br>"
  3. Printing "convert" commands is one thing, calling convert another:
     ls r*jpg | ./fnumfilt -r "10763-10780" 
                 -O "%FNAME th_%FNAME"| xargs convert -scale 100x
     This calls "convert" with like this:
       convert -scale 100x r0010763.jpg th_r0010763.jpg
       convert -scale 100x r0010765.jpg th_r0010765.jpg
     This didn't work on some of my machines, so I added a "-x" option.
     The -x option tries to start the -O  output as command!
     ATTENTION: You may destroy your system or delete important data!
  4. You want to generate numbers:
     fnumfilt -c -r "10-20 -15-17 -12-13"   # -c = use number generator

     ./fnumfilt -c -r "10-20 -15-17 -11-12" -J "%05d" -O "%NUM"
     (-I defines the input filter. It is an ugly hack to use it as
     output format string...)

     I messed /var/log/messages up:
       morx:/var/log # ls messages-20040*
 messages-20040310.gz  messages-20040429  messages-20040501  messages-20040503
 messages-20040406.gz  messages-20040430  messages-20040502  messages-20040504
     The .gz files are real world files. The others are fake and I
     want do delete them:
       morx:/var/log # ls messages-20040*| /home/tapo/lang/fnumfilt/fnumfilt 
                                -r "20040429-20040504" -O "rm /var/log/%FNAME"
          rm /var/log/messages-20040429
          rm /var/log/messages-20040430
          rm /var/log/messages-20040501
          rm /var/log/messages-20040502
          rm /var/log/messages-20040503
          rm /var/log/messages-20040504

     Now I mark the lines with the mouse and paste them into the xterm...   

     That's enough for now.