While faithful to the title, this guide also serves as an
demonstration of advanced batch execution with find
.
find . -regex "./filename\.svg" \
-exec sh -c \
'inkscape -w 1200 "$1" -o "${1%.svg}.png"' \
\
sh {} \;
The find
command collects a list of files matching the
-regex
pattern executes the command passed between
-exec
and \;
for every match.1 In
this example, the command is sh -c
, which itself takes a
command as a string and passes it to a sub-shell with the following
positional arguments.2 The first argument is
sh
at position $0
. This string is used for
error messages. The second argument is {}
at position
$1
. This is the placeholder used by the -exec
flag to represent our matched file. This is the argument which is passed
to the inkscape
process. The output width in pixels is set
with -w
. The destination filename and format is set with
-o
via parameter expansion.
This behavior is analogous to map in functional programming.↩︎
More information about using find
with
sh -c
can be found in this great Stack Overflow answer: https://unix.stackexchange.com/a/389706/727998↩︎