Table of Contents


dirscan - starts and monitors a collection of processes managing entries in a directory


dirscan [-m] [-d directory] [-D directory] [-I includestring] [-X excludestring] path/to/command [arg(s)]


dirscan starts one path/to/command process for each file, dir or other dir entries of the current directory, up to a limit of 20 processes. It does this by executing path/to/command [arg(s)] FILE for each dir entry FILE. dirscan skips directory entries starting with dots.

Every two seconds, dirscan checks for dir entries again. If it sees new entries, it starts a new path/to/command process for the next entry in aphabetical order. If it sees a dir entry where a process has exited, it restarts the process.

dirscan is designed to run forever. If it has trouble on vfork() or running path/to/command it prints a message to stderr; it will try again five seconds later.

dirscan does not need a configuration file or resource config. The usage of Dan Bernstein’s daemontools is strongly recommended.

dirscan has a small memory footprint and uses low resources. Compiled with dietlibc and sstripped its size is below 3 KB. Unlike other tools which are 20 times as big as dirscan it does not use faulty threaded code.


use modification time order instead of alphabetical order, files with equal mtime will be

ordered alphabetically

-d directory
change to directory before reading

dir entries

-D directory
change to directory before exec’uting child. Do not execute child if changing dir failed.

-I includestring
only process

dir entries with filenames containing includestring

-X excludestring

process dir entries with filenames not containing excludestring

See Also

svscan(8) , supervise(8)


This example shows the substitution of NPCD in bulk mode of pnp4nagios:

$ dirscan -m -d var/perfspool /usr/bin/perl

Automatically compress all files moved into a directory:

$ dirscan -d zipped -X .gz /bin/gzip -9


Ordering by modification time can only be done up to a resolution of one second due to "time_t st_mtime" of struct stat.
dirscan should be run under supervise(8) control of the daemontools ( because of reliability and security reasons like dropping rights when using supervise and daemontools.


Frank Bergmann,

Table of Contents