# Send notes for processing by other programs

A great way to expand `zk` feature set is to explore a wealth of command-line
tools available. You can use `zk`'s powerful
[searching and filtering](../notes/note-filtering.md) capabilities to select notes before
delegating further processing to other programs.

## Process file paths

Many programs expect file paths for input. You can interface with such program
using the `path` list format and a space delimiter.

```sh
$ zk list --format path --delimiter " "
```

If the file paths can contain spaces, you may want to quote manually the paths,
using the `{{path}}` [template variable](../notes/template-format.md) instead:

```sh
$ zk list --format "'{{path}}'" --delimiter " "
```

As always, this is such a useful [command alias](../config/config-alias.md) to have:

```toml
paths = "zk list --format \"'{{path}}'\" --quiet --delimiter ' ' $@"
```

Some programs – such as `xargs` – work better when file paths are separated by
the ASCII NUL character (`\0`). In this case, you can use the `--delimiter0` (or
`-0`) option.

For example, this command prints the full Git history of the notes:

```sh
$ zk list --format path --delimiter0 | xargs -0 git log --patch --
```

### Feeding `zk` to itself

Some `zk` options such as `--exclude` also take file paths for parameters. Let's
increase their flexibility by nesting `zk` calls. In this case, the delimiter
will be `,`.

For example, this command lists the notes which are linked by at least one other
note – so the notes which are _not_ orphans.

```sh
$ zk list --exclude "`zk list -q -f path -d "," --orphan`"
```

And this one finds the notes which are linked by at least one note in
`journal/`.

```sh
$ zk list --linked-by "`zk list -q -f path -d "," journal`"
```

## Process the content of a note

If you want to directly transform the content instead, you may use the
`raw-content` template variable, which will print the full content of the note
file.

In this particular case, we usually want to process only one note at a time. You
can make sure that `zk list` will print only the first note from the result with
`--limit 1` (or `-n1`).

```sh
$ zk list --format {{raw-content}} --limit 1
```
