If you have interesting use cases or scripts using kabcclient,
let me know about it!
Export all contacts to a vcard file
kabcclient --list -of vcard -oc UTF8 > exported-contacts.vcfThis can be written even shorter because of the defaults for output format and output codec and the shorter form of the --list command
kabcclient -L > exported-contacts.vcfvcard is the default output format as it can contain all data for a addressbook entry. UTF8 is the default encoding for vcard because the VCard specification requests that.
kabcclient --list -oc LOCAL > exported-contacts.vcf
Search for contacts contacts that have "john" in either name or email addresses:
kabcclient -S johnDoing the same but read from stdin:
echo "john" | kabcclient -SBoth variants use a couple of option defaults. The full commandline, but still using -S instead of search's long form --search, would look like this
kabcclient -if search -ic LOCAL -of vcard -oc UTF8 -S johnsearch is a special input format parser, which will apply the input text to both name and email fields so either can match contacts in the addressbook.
Matching is case insensitive by default, i.e. the input "john" and the input "John"
will result in the same output.
In case you want to switch text matching to case sensitive, add the commandline
switch --match-case:
kabcclient --match-case -S John
Searching for more than one name is as simple as adding them to the commandline:
kabcclient -S John Jane BobThis start a search for "John", then search for "Jane" and finally search for "Bob".
echo "John Bob" | kabcclient -SWill look for someone called "John Bob", while
( echo "John" ; echo "Bob" ) | kabcclient -Swill first look for all "Johns" and the for all "Bobs"
A more realistic input situation would be this
kabcclient -SCalled like this, or even without the -S as search is the default operation, will let kabcclient wait for input directly from the terminal it runs on, i.e. each line you type will trigger a search for it.
The full VCard data of a contact might be too much, for example we could be only interested in poeple's emails:
kabcclient -of email -S JohnThis will list the primary email address of all "Johns" in the addressbook.
kabcclient -of email -of-opts allemails -S JohnIn cases where more than one "John" is in the addressbook, this can easily make it impossible to know which email address belongs to which "John".
kabcclient -of email -of-opts allemails,withname -S JohnMultiple options are separated by commas. To get a list and description of the available format options, just use help as the parameter instead:
kabcclient -of email -of-opts help
The add operation really adds entries to the addressbook, i.e. if the input is
one of the entries which are already in the addressbook, you will have a duplicate.
The advantage is that is will not overwrite any data currently in the addressbook.
Add requires a input format to be specified because the default input format search
isn't a good choice for this kind of operation.
Adding a new contact based on the name and email address as commonly formatted by email programs:
kabcclient -if email --add "Marilyn Monroe <mmonroe@moviestars.com>"Of course the possibilty to read from stdin still applies:
echo "Marilyn Monroe <mmonroe@moviestars.com>" | kabcclient -if email --addOutput of both commands will be the VCard representation of the contact data (default output format being vcard as discussed in examples for list)
A variant of the above exmple is to use kabcclient as a VCard converter:
echo "Marilyn Monroe <mmonroe@moviestars.com>" | kabcclient -if email --nosave --addThe --nosave option keeps the new contact entry from actually being written to the addressbook's permanent location, e.g. the standard addressbook file, so the only affect the command has is to read the provided name and email combination and write the resulting contact to stdout, which, as shown above, is formatted by the vcard output format
Consider you have exported all your contacts to a VCard file on one machine:
kabcclient --list > contacts.vcfand you want to import them on a different machine or on a different user account:
cat contacts.vcf | kabcclient -if vcard -ARemember that this will not overwrite any data of the target addressbook but might lead to duplicate entries.
The remove operation deletes contacts from the addressbook, unless the
--nosave option keeps it from actually writing the changes to the permanent
addresbook location.
As an additional safety measure, remove will only delete contacts that match
unambiguoulsy, i.e. if more than one contact matches none of them is
deleted.
Any deleted contact is written to stdout
Trying to remove contact data for "John" from the addressbook:
kabcclient -R JohnAs explained in the examples for search the input "John" will be used by the default input format parser search for matching against name and email addresses of contacts in the addressbook and matches will be case insensitive.
By providing more information about the contact to remove, the chance of getting a clear single match increases:
kabcclient -if email -R "John Meyer <jmeyer@somecompany.com>"Using the email input format parser provides name and email to match against possible candiates from the addressbook.
The best possible matching criteria is provided by the uid input format parser.
An UID is a unique identifier created by the addressbook itself, thus matching exactly just
one contact entry.
UIDs can be retrieved by using other operations, e.g. --list and --search, using the
uid output format:
kabcclient -of uid -L > all-uids.txt cat one-uid.txt | kabcclient -if uid -RAs a consequence the following command sequence would empty the whole addressbook if the --nosave option would not be present:
kabcclient -of uid -L | kabcclient -if uid --nosave -R
The merge operation is quite similar to the add operation, but instead
of adding new contact entries to the addressbook, it tries to add the new data
to already existing contacts.
As a result it requires unambiguous matches like the remove operation.
As merging information results in changes to the addressbook, the --nosave
switch can be used to just test the results some input data would have on the
addressbook contacts.
For each successull match kabcclient will write the merged contact data to
stdout, just like it would for new entries when using add.
As the program needs both something to match and some data to add, simple input
formats like name won't be very effective.
Assuming that a person's name is enought information to find a single matching
contact in the addressbook, the following example will add the given e-mail
address unless it is already part of the contacts data:
kabcclient -if email -M "John Meyer <jmeyer@somecompany.com>"More effective merge operations can be conducted by using the vcard or csv input formats.
As discussed in the examples for remove the best matching
is provided by the UIDs the addressbook generates to uniquely identify contacts.
Assume that a backup of the contacts has been creates using the list operation
and other kinds of access have corrupted parts of the contacts in the addressbook.
cat exported-contacts.vcf | kabcclient -if vcard -MData that is present for contacts in the input file but not present for the respective contact in the addressbook will be added to the one in the addressbook.
Author: Kevin Krammer, 8010 Graz, Austria