earmark feed
earmark feed [--remove [EPISODE ...]] [--yes] [--rebuild] [--check]
[--prune] [--keep N] [--max-size SIZE] [--orphans]
With no flags, lists what is published: one numbered line per episode, the total size, and the feed URL to paste into a podcast app.
1 2026-08-23 0:22:14 10.4 MB Attention Is All You Need
2 2026-08-19 0:11:02 5.2 MB A Mathematical Theory of Communication
2 episode(s), 16 MB total
remove one with: earmark feed --remove
feed https://filedn.com/XXXX/earmark/feed.xml
The number is a line of that list, and it is what --remove accepts.
Options
| Flag | Default | Means |
|---|---|---|
--remove [EPISODE ...] |
off | delete episodes by title or list number, audio and text with them; bare --remove asks |
--yes, -y |
off | do not ask before removing |
--rebuild |
off | rewrite feed.xml and the cover from the current settings |
--check |
off | prove the published URLs actually serve |
--prune |
off | remove episodes; needs --keep or --max-size |
--keep N |
none | keep this many newest |
--max-size SIZE |
none | keep newest episodes under this total, e.g. 800MB |
--orphans |
off | with --prune, also delete library files the feed no longer lists |
--library PATH |
the library to act on |
--remove
Deletes named episodes outright: the feed entry, audio/<slug>.mp3 and text/<slug>.md. This is the flag for “not that one”; --prune is for “keep the newest twenty”, and prune keeps the Markdown.
With no argument it prints the numbered list and asks which to remove:
$ earmark feed --remove
1 2026-08-23 0:22:14 10.4 MB Attention Is All You Need
2 2026-08-19 0:11:02 5.2 MB A Mathematical Theory of Communication
remove which? (numbers, ranges or titles; blank to cancel) 2
removing:
A Mathematical Theory of Communication
audio/a-mathematical-theory-of-communication.mp3
text/a-mathematical-theory-of-communication.md
delete 1 episode(s) and those files? [y/N] y
removed 1 episode(s)
feed https://filedn.com/XXXX/earmark/feed.xml
Every file that goes is named before the question, because the Markdown is the half you may have hand-edited.
An answer may mix numbers, ranges and titles: 1, 3-5, attention.
Given arguments it removes without printing the list, but still shows the titles it matched and asks to confirm:
earmark feed --remove "Attention Is All You Need"
earmark feed --remove 2 5
earmark feed --remove attention shannon --yesAn argument matches an episode by list number, then by exact title, then by any title containing it, case-insensitively – so --remove attention is enough when only one episode has that word in its title. Text that matches nothing is an error and nothing is removed. --yes skips the confirmation, which is what a script wants; with no TTY to ask, bare --remove is an error rather than a guess.
Nothing is recoverable from the library afterwards; re-publishing means running earmark publish on the original source again.
--rebuild
Rewrites feed.xml and re-normalizes the cover from the current [feed] settings. Touches no audio. Run it after changing a title, author, description, or cover image.
--check
HEADs the feed, the cover and the newest episodes and reports which of them actually serve. This is the fastest diagnosis for “the app shows nothing”, which is almost always a wrong base_url, a failure that otherwise produces no error anywhere.
--prune
Needs one of --keep or --max-size; it will not guess.
--max-size accepts a human size string such as 800MB or 2GB, and keeps the newest episodes that fit under it.
--orphans deletes files
--prune alone removes episodes from the feed. Adding --orphans also deletes library files the feed no longer lists: the leftover MP3s from episodes already dropped. It only runs alongside --prune, and cover.jpg is never treated as an orphan.
Examples
earmark feed
earmark feed --remove
earmark feed --remove "Attention Is All You Need"
earmark feed --check
earmark feed --rebuild
earmark feed --prune --keep 20
earmark feed --prune --max-size 800MB
earmark feed --prune --keep 20 --orphans