Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
MU FIND(1)		     General Commands Manual		      MU FIND(1)

NAME
     mu-find - find e-mail messages in the mu database.

SYNOPSIS
     mu [COMMON-OPTIONS] find [OPTIONS] SEARCH_EXPRESSION

DESCRIPTION
     mu  find  is  the	mu command for searching e-mail message that were stored
     earlier using mu index(1).

SEARCHING MAIL
     mu find starts a search for messages in the database that match some search
     pattern. The search patterns are described in detail in mu-query(7).

     For example:

	    $ mu find subject:snow and date:2009..

     would find all messages in 2009 with `snow' in the subject field, e.g:

	    2009-03-05 17:57:33 EET Lucia  <lucia@example.com> running in the snow
	    2009-03-05 18:38:24 EET Marius <marius@foobar.com> Re: running in the snow

     This uses the default, plain output (implicitly, --format=plain). For other
     output formats (such as symlinks, XML, s-expressions or JSON), see the dis-
     cussion of --format in the OPTIONS-section below.

     The search pattern is taken as a command-line parameter. If the search  pa-
     rameter  consists of multiple parts (as in the example) they are treated as
     if there were a logical and between them.

     For details on the possible queries, see mu-query(7).

FIND OPTIONS
     Note, some of the important options are described in the mu(1) manual  page
     and not here, as they apply to multiple mu commands.

     The find-command has various options that influence the way mu displays the
     results.  If you don't specify anything, the defaults are --fields="d f s",
     --sortfield=date and --reverse.

   -f, --fields fields
     Specifies a string that determines which fields are shown	in  the  output.
     This  string consists of a number of characters (such as 's' for subject or
     'f' for from), which will replace with the  actual  field	in  the  output.
     Fields  that  are	not known will be output as-is, allowing for some simple
     formatting.

     For example:

	    $ mu find subject:snow --fields "d f s"

     lists the date, subject and sender of all messages with `snow' in the their
     subject.

     The table of replacement characters is super-set of the list mentioned  for
     search parameters, such as:
	    t	    *t*o: recipient
	    d	    Sent *d*ate of the message
	    f	    Message sender (*f*rom:)
	    g	    Message flags (fla*g*s)
	    l	    Full path to the message (*l*ocation)
	    s	    Message *s*ubject
	    i	    Message-*i*d
	    m	    *m*aildir

     For the complete list, try the command: mu info fields.

     The  message  flags  are described in mu-query(7). As an example, a message
     which is `seen', has an attachment and is signed has asz as its correspond-
     ing output string, while an encrypted new message has nx.

   -s, --sortfield field and -z,--reverse
     Specify the field to sort the search results by and  the  direction  (i.e.,
     `reverse' means that the sort should be reverted - Z-A). Examples include:

	    cc,c	    Cc (carbon-copy) recipient(s)
	    date,d	    Message sent date
	    from,f	    Message sender
	    maildir,m	    Maildir
	    msgid,i	    Message id
	    prio,p	    Message priority
	    subject,s	    Message subject
	    to,t	    To:-recipient(s)

     For the complete list, try the command: mu info fields.

     Thus, for example, to sort messages by date, you could specify:

	    $ mu find fahrrad --fields "d f s" --sortfield=date --reverse

     Note,  if	you  specify a sortfield, by default, messages are sorted in re-
     verse (descending) order (e.g., from lowest to highest). This is usually  a
     good  choice,  but  for dates it may be more useful to sort in the opposite
     direction.

   -n, --maxnum number
     If number > 0, display maximally that number of entries. If not  specified,
     all matching entries are displayed.

   --summary-len number
     If  number  >  0, use that number of lines of the message to provide a sum-
     mary.

   --format plain|links|xml|sexp|json|json2
     Output results in the specified format.

     --  The default is plain, i.e., normal output with one line per message.

     --  links outputs the results as a maildir with symbolic links to the found
	 messages. This enables easy integration with  mail-clients  (see  below
	 for more information). This requires --linksdir.

     --  xml formats the search results as XML.

     --  sexp formats the search results as an s-expression as used in Lisp pro-
	 gramming environments.

     --  json formats the output as JSON; it is a direct translation of the sexp
	 format

     --  json2	is  a  slightly more idiomatic JSON, for now the only difference
	 with json is that the latter avoids the ':' prefix in key-names  (e.g.,
	 "subject" instead of ":subject"). json2 is still experimental.

   --linksdir dir and -c, --clearlinks
     When  using  --format=links,  output the results as a maildir with symbolic
     links to the found messages.  This  enables  easy	integration  with  mail-
     clients  (see below for more information). mu will create the maildir if it
     does not exist yet.

     If you specify --clearlinks, existing symlinks will  be  cleared  from  the
     target  directories;  this  allows for re-use of the same maildir. However,
     this option will delete any symlink it finds, so be careful.

	    $ mu find grolsch --format=links --linksdir=~/Maildir/search --clearlinks

     stores links to found messages in ~/Maildir/search. If the  directory  does
     not  exist  yet,  it  will  be created. Note: when mu creates a Maildir for
     these links, it automatically inserts a .noindex file, to exclude	the  di-
     rectory from mu index.

   --after timestamp
     Only  show  messages  whose  message files were last modified (mtime) after
     timestamp. timestamp is a UNIX time_t value, the number  of  seconds  since
     1970-01-01 (in UTC).

     From  the command line, you can use the date command to get this value. For
     example, only consider messages modified (or created) in the  last  5  min-
     utes, you could specify
	    --after=`date +%s --date='5 min ago'`

     This is assuming the GNU date command.

   --exec command
     The  --exec  option  causes command to be executed on each matched message;
     for example, to see the raw text of all messages matching `milkshake',  you
     could use:
	    $ mu find milkshake --exec='less'

     which is roughly equivalent to:
	    $ mu find milkshake --fields="l" | xargs less

   -b, --bookmark bookmark
     Use  a  bookmarked search query. Using this option, a query from your book-
     mark file will be prepended to other search  queries.  See  mu-bookmarks(5)
     for the details of the bookmarks file.

   -u, --skip-dups
     Whenever  there  are multiple messages with the same message-id field, only
     show the first one. This is useful if you have copies of the same	message,
     which  is	a  common  occurrence  when  using  e.g. Gmail together with of-
     flineimap.

   -r, --include-related
     Include messages being referred to by the matched messages -- i.e.. include
     messages that are part of the same message thread as some matched messages.
     This is useful if you want Gmail-style `conversations'.

   -t, --threads
     Show messages in a `threaded' format -- that is, with indentation	and  ar-
     rows  showing  the  conversation  threads in the list of matching messages.
     When using this, sorting is chronological (by date), based  on  the  newest
     message in a thread.

     Messages  in  the threaded list are indented based on the depth in the dis-
     cussion, and are prefix with a kind of arrow with	thread-related	informa-
     tion about the message, as in the following table:
	    |		  | normal | orphan | duplicate |
	    |-------------+--------+--------+-----------|
	    | first child | `->    | `*>    | `=>	|
	    | other	  | |->    | |*>    | |=>	|

     Here,  an	`orphan'  is  a message without a parent message (in the list of
     matches), and a duplicate is a message whose message-id  was  already  seen
     before;  not this may not really be the same message, if the message-id was
     copied.

     The algorithm used for determining the threads is based on Jamie Zawinksi's
     description: http://www.jwz.org/doc/threading.html

   -a,--analyze
     Instead of executing the query, analyze it by show the parse-tree s-expres-
     sion and a stringified version of the Xapian query. This can help users  to
     determine how mu interprets some query.

     The output of this command are differ between versions, but should be help-
     ful nevertheless.

   --muhome
     Use a non-default directory to store and read the database, write the logs,
     etc.   By	default,  mu  uses the XDG Base Directory Specification (e.g. on
     GNU/Linux this defaults to ~/.cache/mu and ~/.config/mu). Earlier	versions
     of mu defaulted to ~/.mu, which now requires --muhome=~/.mu.

     The  environment variable MUHOME can be used as an alternative to --muhome.
     The latter has precedence.

COMMON OPTIONS
   -d, --debug
     Makes mu generate extra debug information, useful for debugging the program
     itself. Debug information goes to the standard logging location; see mu(1).

   -q, --quiet
     Causes mu not to output informational messages and progress information  to
     standard  output,	but  only  to the log file. Error messages will still be
     sent to standard error. Note that mu index is much faster with --quiet,  so
     it is recommended you use this option when using mu from scripts etc.

   --log-stderr
     Causes  mu  to  not  output  log messages to standard error, in addition to
     sending them to the standard logging location.

   --nocolor
     Do not use ANSI colors. The environment variable NO_COLOR can be used as an
     alternative to --nocolor.

   -V, --version
     Prints mu version and copyright information.

   -h, --help
     Lists the various command line options.

INTEGRATION
     It is possible to integrate mu find with some mail clients

   mutt
     For mutt you can use the following in your muttrc; pressing the F8 key will
     start a search, and F9 will take you to the results.

	    # mutt macros for mu
	    macro index <F8> "<shell-escape>mu find --clearlinks --format=links --linksdir=~/Maildir/search " \\
				     "mu find"
	    macro index <F9> "<change-folder-readonly>~/Maildir/search" \\
				     "mu find results"

   Wanderlust
     Sam B suggested the following on the mu-mailing list. First add the follow-
     ing to your Wanderlust configuration file:

	    (require 'elmo-search)
	    (elmo-search-register-engine
		'mu 'local-file
		:prog "/usr/local/bin/mu" ;; or wherever you've installed it
		:args '("find" pattern "--fields" "l") :charset 'utf-8)

	    (setq elmo-search-default-engine 'mu)
	    ;; for when you type "g" in folder or summary.
	    (setq wl-default-spec "[")

     Now, you can search using the g key binding; you can also create  permanent
     virtual  folders when the messages matching some expression by adding some-
     thing like the following to your folders file.

	    VFolders {
	      [date:today..now]!mu  "Today"
	      [size:1m..100m]!mu    "Big"
	      [flag:unread]!mu	    "Unread"
	    }

     After restarting Wanderlust, the virtual folders should appear.

ENCODING
     mu find output is encoded	according  to  the  locale  wwhen  using  --for-
     mat=plain	(the  default  format),  and  UTF-8 for all other formats (sexp,
     xml).

PERFORMANCE
     Some notes on performance, comparing the timings between  some  recent  re-
     leases; taking the total number for 10 test runs.

     1.  time (repeat 10 mu find "" -n 50000 > /dev/null)

     2.  time  (repeat	10  mu	find  ""  -n 50000 --include-related --threads >
	 /dev/null)

		    +---------------------------------------------+
		    |	    release   time 1 (sec)   time 2 (sec) |
		    +---------------------------------------------+
		    |		1.4   8.9s	     59.3s	  |
		    |		1.6   8.3s	     27.5s	  |
		    |		1.8   8.7s	     29.3s	  |
		    |	       1.10   9.8s	     30.6s	  |
		    | 1.11 (master)   10.1s	     29.5s	  |
		    +---------------------------------------------+

EXIT CODE
     This command returns 0 upon successful completion, or a non-zero exit  code
     otherwise.

     0.  success

     2.  no matches found. Try a different query

     11. database schema mismatch. You need to re-initialize mu, see mu-init(1)

     19. failed  to acquire lock. Some other program has exclusive access to the
	 mu database

     99. caught an exception

REPORTING BUGS
     Please report bugs at https://github.com/djcb/mu/issues.

AUTHOR
     Dirk-Jan C. Binnema <djcb@djcbsoftware.nl>

COPYRIGHT
     This manpage is part of mu 1.14.2.

     Copyright A(C) 2008-2026 Dirk-Jan C. Binnema. License GPLv3+: GNU GPL  ver-
     sion  3  or later https://gnu.org/licenses/gpl.html. This is free software:
     you are free to change and redistribute it. There is NO  WARRANTY,  to  the
     extent permitted by law.

SEE ALSO
     mu(1), mu-index(1), mu-query(7), mu-info(1)

								      MU FIND(1)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=mu-find&sektion=1&manpath=FreeBSD+Ports+15.1.quarterly>

home | help