---
name: "snfetch"
section: "8"
platform: "linux"
package: "sn"
version: "0.3.8-12"
release: "Debian 12 (Bookworm)"
platforms: ["linux"]
url: "https://new.carta.tech/snfetch"
---

# snfetch(8)

fetch articles.

## NAME

snfetch - fetch articles.

## SYNOPSIS

**snfetch** \[-*r*\] \[-*t timeout*\] \[-*c depth*\] *group* \[*serial* \[*max*\]\]\

## DESCRIPTION

**snfetch** expects to read NNTP from file descriptor 6, and write NNTP to file descriptor 7, which descriptors must have already been open. Articles retrieved are written to descriptor 1. Each article displayed is separated from the next by a dot on a line by itself.  These articles are NNTP safe, in the sense that double-dot unquoting is not done, and all lines end in CR-LF. **snfetch** expects to begin it's NNTP speech by giving the GROUP command.  The upstream server's greeting must have already been read some other way.  Likewise, when **snfetch** is done, it will not send a QUIT command.

The output is suitable for feeding to **snstore**.

**snfetch** always checks the article ID of the prospective article before retrieving it.  If the ID already exists in the ID database, the article will not be retrieved.  Note that this does **not** guarantee that all articles retrieved will be unique.

**snfetch** does not guarantee to leave the NNTP conversation in a decent state (there might be more data to read, but **snfetch** aborted part way).

You will need to be root or own /var/spool/sn in order to run this program.

It is not safe to direct the output of several **snfetch**es to the same pipe descriptor, but a file descriptor is all right.

## OPTIONS

- \-*t timeout*

  **snfetch** will wait only *timeout* seconds (default 180) for data before giving up, if the server doesn't respond.

- \-*r*

  Output in news batch format instead.  All articles will take the **#! rnews** form only, even if there is just one article, all lines end in bare linefeed, and dot-unquoting is performed.

- \-*c depth*

  Employ a command pipeline of depth *depth*. NNTP command pipelining is not officially sanctioned, so by default no pipeline is used.  However, a pipeline with a *depth* greater than 0 will substantally reduce transaction latency **if** the server accepts it.  A respectable value for *depth* might be between 1 and 5.

## ARGUMENTS

**snfetch** takes the name of a single newsgroup on its command line.  If *serial* is given, this is taken to be the first article number on *group* on the server to fetch. If *max* is specified, this is taken to be the maximum number of articles to fetch.  The first article retrieved may be after *serial* if *max* would be violated.  If *max* is not specified, there is no limit.

## ENVIRONMENT VARIABLES

- **SNROOT**

  If this is set and is not empty, the value is used in place of **/var/spool/sn**, the default news spool directory.

## FILES

- /var/spool/sn/*newsgroup*/.serial

  If *serial* is not specified, the starting serial number is taken from the file /var/spool/sn/*newsgroup*/*.serial*. This defaults to **0** if the file can't be read.

- /var/spool/sn/*newsgroup*/.serial.tmp

  If **snfetch** exits with success (0), the new *serial* is written into this file. The original file /var/spool/sn/*newsgroup*/.serial is readonly by **snfetch**.

- /var/spool/sn/*newsgroup*/.max

  If *max* is not specified on the command line, *max* is read from this file. If the file cannot be read or does not exist, there is no limit.

## EXIT CODES

**snfetch** exits 1 on usage error, 2 on system failure, 3 on protocol error, 4 on read timeout, and 0 on success.

## SEE ALSO

snstore (8), snget (8)
