# ippfind(1)

## Name

ippfind - find internet printing protocol printers

## Synopsis

ippfind [ OPTIONS ] REGTYPE[,SUBTYPE][.DOMAIN.] ... [ EXPRESSION ... ]
ippfind [ OPTIONS ] NAME[.REGTYPE[.DOMAIN.]] ... [ EXPRESSION ... ]
ippfind --help
ippfind --version

## Description

ippfind finds services registered with a DNS server or available through local devices. Its primary purpose is to find IPP printers and show their URIs, show their current status, or run commands.

### Registration Types

ippfind supports the following registration types:

_http._tcp
HyperText Transport Protocol (HTTP, RFC 9110)

_https._tcp
Secure HyperText Transport Protocol (HTTPS, RFC 9110)

_ipp._tcp
Internet Printing Protocol (IPP, RFCs 3510+8010+8011)

_ipps._tcp
Secure Internet Printing Protocol (IPPS, RFCs 7472+8010+8011)

_printer._tcp
Line Printer Daemon (LPD, RFC 1179)

### Expressions

ippfind supports expressions much like the find(1) utility. However, unlike find, ippfind uses POSIX regular expressions instead of shell filename matching patterns. If --exec, -l, --ls, -p, --print, --print-name, -q, --quiet, -s, or -x is not specified, ippfind adds --print to print the service URI of anything it finds. The following expressions are supported:

-d REGEX

--domain REGEX
True if the domain matches the given regular expression.

--false
Always false.

-h REGEX

--host REGEX
True is the hostname matches the given regular expression.

-l

--ls
Lists attributes returned by Get-Printer-Attributes for IPP printers and traditional find "-ls" output for HTTP URLs. The result is true if the URI is accessible, false otherwise.

--local
True if the service is local to this computer.

-N NAME

--literal-name NAME
True if the service instance name matches the given name.

-n REGEX

--name REGEX
True if the service instance name matches the given regular expression.

--path REGEX
True if the URI resource path matches the given regular expression.

-P NUMBER[-NUMBER]

--port NUMBER[-NUMBER]
True if the port matches the given number or range.

-p

--print
Prints the URI if the result of previous expressions is true. The result is always true.

-q

--quiet
Quiet mode - just returns the exit codes below.

-r

--remote
True if the service is not local to this computer.

-s

--print-name
Prints the service instance name if the result of previous expressions is true. The result is always true.

--true
Always true.

-t KEY

--txt KEY
True if the TXT record contains the named key.

--txt-KEY REGEX
True if the TXT record contains the named key and matches the given regular expression.

-u REGEX

--uri REGEX
True if the URI matches the given regular expression.

-x COMMAND [ ARGS ] ';'

--exec COMMAND [ ARGS ] ';'
Executes the specified program if the current result is true. "{foo}" arguments are replaced with the corresponding value - see SUBSTITUTIONS below.

Expressions may also contain modifiers:

( EXPRESSION )
Group the result of expressions.

! EXPRESSION

--not EXPRESSION
Unary NOT of the expression.

EXPRESSION EXPRESSION

EXPRESSION --and EXPRESSION
Logical AND of expressions.

EXPRESSION --or EXPRESSION
Logical OR of expressions.

### Substitutions

The substitutions for "{FOO}" in -e and --exec are:

{service_domain}
Domain name, e.g., "example.com.", "local.", etc.

{service_hostname}
Fully-qualified domain name, e.g., "printer.example.com.", "printer.local.", etc.

{service_name}
Service instance name, e.g., "My Fine Printer".

{service_port}
Port number for server, typically 631 for IPP and 80 for HTTP.

{service_regtype}
DNS-SD registration type, e.g., "_ipp._tcp", "_http._tcp", etc.

{service_scheme}
URI scheme for DNS-SD registration type, e.g., "ipp", "http", etc.

{}

{service_uri}
URI for service, e.g., "ipp://printer.local./ipp/print", "http://printer.local./", etc.

{txt_key}
Value of TXT record key (lowercase).

## Options

ippfind supports the following options:

--help
Show program help.

--version
Show program version.

-4
Use IPv4 when listing.

-6
Use IPv6 when listing.

-T SECONDS
Specify find timeout in seconds. If 1 or less, ippfind stops as soon as it thinks it has found everything. The default timeout is 1 second.

-V VERSION
Specifies the IPP version when listing. Supported values are "1.1", "2.0", "2.1", and "2.2".

## Exit Status

ippfind returns 0 if the result for all processed expressions is true, 1 if the result of any processed expression is false, 2 if browsing or any query or resolution failed, 3 if an undefined option or invalid expression was specified, and 4 if it ran out of memory.

## Environment

When executing a program, ippfind sets the following environment variables for the matching service registration:

IPPFIND_SERVICE_DOMAIN
Domain name, e.g., "example.com.", "local.", etc.

IPPFIND_SERVICE_HOSTNAME
Fully-qualified domain name, e.g., "printer.example.com.", "printer.local.", etc.

IPPFIND_SERVICE_NAME
Service instance name, e.g., "My Fine Printer".

IPPFIND_SERVICE_PORT
Port number for server, typically 631 for IPP and 80 for HTTP.

IPPFIND_SERVICE_REGTYPE
DNS-SD registration type, e.g., "_ipp._tcp", "_http._tcp", etc.

IPPFIND_SERVICE_SCHEME
URI scheme for DNS-SD registration type, e.g., "ipp", "http", etc.

IPPFIND_SERVICE_URI
URI for service, e.g., "ipp://printer.local./ipp/print", "http://printer.local./", etc.

IPPFIND_TXT_KEY
Values of TXT record KEY (uppercase).

## Examples

To show the status of all registered IPP printers on your network, run:

        ippfind --ls

Similarly, to send a PostScript test page to every PostScript printer, run:

        ippfind --txt-pdl application/postscript --exec ipptool
          -f onepage-letter.ps '{}' print-job.test \;

## See Also

ipptool(1)

## Copyright

Copyright © 2021-2025 by OpenPrinting.