To prevent disappointments, I have to state right away that all of these are
command-line programs, both because I tend to work mostly in terminal windows
and because I lack the time to program nice GUIs. So, no eye-candy.
Additionally, even though all of the programs work well for their intended
purpose, different people work in different ways, and not all of them might be
useful to everybody. To facilitate your decision whether to try them out, I
have classified them as follows:
Understand and adapt
To be used in pipes
Experimental or hackers only
VHDocL, a documentation utility for designs coded in
the hardware description language VHDL. More
alsacap serves to list ALSA devices and explore
their possible configuration parameters. Download.
fifo, a first-in-first-out buffer which reads
from stdin and writes to stdout. Useful for buffering audio data to avoid
hickups when playing an audio CD digitally or for other real-time
applications where latency is not an issue. Download.
maxwav substitutes the maximum length in the
header of a piped .wav file. Download.
The Perl script imgtime.pl
allows you to re-synchronise the times embedded in the EXIF information of
digital photos. It shifts a set of photos so that one of them receives a
certain time, so that you can photograph a clock and adjust the times of all
The shell script thumbindex
uses ImageMagick to generate thumbnail pages of images (25 thumbnails each).
The thumbnails' caption contains the image file name and, for those
ImageMagick versions which support EXIF, the time and date of exposure (EXIF
The small program motoacc
serves to access a Motorola cellphone from the command line. It requires the
library. It was created because moto4lin did not work for me.
Here are some of my shell functions and scripts which save me from having to do
numerous odiously boring tasks myself. Experts may want to adapt some of them
to their needs.
mkcd: A shell function for creating a directory and
descending into it in one go.
The reverse: rmcd, a shell function for leaving an
empty directory and removing it.
The shell script mkscript creates an empty shell
script for each of its arguments, which contains just the line
"#!/bin/sh" and is an executable file. It then calls your $EDITOR
with the same list of arguments. Saves the first 50 or so keypresses every
time you write a new shell script. mkperl does the
same thing for perl scripts; mkpython for python
Serial and parallel multiprocessing
The following longer scripts all support the -h command line switch to obtain a
brief usage message.
The shell script para runs the same command for several
files (or other kinds of arguments) in parallel. It keeps your multi-core
CPU busy and gets quick results when encoding OGG Vorbis or performing
similar tasks. This is not needed any more as xargs can now do the same
with its -P option.
The Perl script nametracks.pl comfortably
names ripped audio tracks after enumerated song titles.
renum renames or moves a series of files to numbered
mulmv renames or moves all files which start with a
certain prefix to files starting with a different prefix. Prefixes may
The shell script float.sh uses the C preprocessor
to print out the floating-point limit constants that used to be contained
explicitly in the float.h header file.
The shell script cscript compiles a single-source C
program and executes them. The related mkcscript
creates a template cscript script. Together they allow quickly writing
small C programs that can be executed like interpreter scripts.
tc.pl is a calculator for time durations which accepts
operands in minutes:seconds or hours:minutes:seconds form and outputs
results in both total seconds and the two other formats.
graftat makes mkisofs's graft points feature
more usable and thereby facilitates inserting files and directories at a
given path in a CD-ROM image. It has the semantics of cp or mv and
outputs graft points in the right format for a mkisofs command line.
Enhancements or bug fixes for some open-source programs, primarily those whose
authors do not accept patches or which are so paralysed by bureaucracy that bug
reports are lost in Kafka-land. Not all of them apply to the newest version of
their program; they are described in more detail on my patches