--- /dev/null
+#!/usr/bin/perl
+use strict;
+use warnings;
+
+use OpenSRF::System;
+use OpenSRF::EX qw/:try/;
+use OpenSRF::AppSession;
+use OpenSRF::Utils::SettingsClient;
+use OpenILS::Application::AppUtils;
+use OpenILS::Utils::Fieldmapper;
+
+use MARC::Record;
+use MARC::File::XML;
+use UNIVERSAL::require;
+
+use Getopt::Long;
+
+my @formats = qw/USMARC UNIMARC XML/;
+
+my ($config,$format,$encoding,$help) = ('/openils/conf/bootstrap.conf','USMARC','MARC8');
+
+GetOptions(
+ 'help' => \$help,
+ 'config=s' => \$config,
+ 'format=s' => \$format,
+ 'encoding=s' => \$encoding,
+);
+
+if ($help) {
+ print <<" HELP";
+Usage: $0 [options]
+ --help or -h This screen.
+ --config or -c Configuration file [/openils/conf/bootstrap.conf]
+ --format or -f Output format (USMARC, UNIMARC, XML) [USMARC]
+ --encoding or -e Output Encoding (UTF-8, ISO-8859-?, MARC8) [MARC8]
+
+Example:
+
+ cat list_of_ids | $0 > output_file
+
+ HELP
+ exit;
+}
+
+$format = uc($format);
+$encoding = uc($encoding);
+
+binmode(STDOUT, ':raw') if ($encoding ne 'UTF-8');
+binmode(STDOUT, ':utf8') if ($encoding eq 'UTF-8');
+
+if (!grep { $format eq $_ } @formats) {
+ die "Please select a supported format. ".
+ "Right now that means one of [".
+ join('|',@formats). "]\n";
+}
+
+if ($format ne 'XML') {
+ my $type = 'MARC::File::' . $format;
+ $type->require;
+}
+
+OpenSRF::System->bootstrap_client( config_file => $config );
+Fieldmapper->import(IDL => OpenSRF::Utils::SettingsClient->new->config_value("IDL"));
+
+my $ses = OpenSRF::AppSession->connect('open-ils.cstore');
+
+print <<HEADER if ($format eq 'XML');
+<?xml version="1.0" encoding="$encoding"?>
+<collection xmlns='http://www.loc.gov/MARC21/slim'>
+HEADER
+
+while ( my $i = <> ) {
+ my $bib = $ses->request( 'open-ils.cstore.direct.biblio.record_entry.retrieve', $i )->gather(1);
+
+ next unless $bib;
+
+ if ($format eq 'XML') {
+ print $bib->marc . "\n";
+ } else {
+ print MARC::Record->new_from_xml( $bib->marc, $encoding, $format )->as_usmarc;
+ }
+}
+
+print "</collection>\n" if ($format eq 'XML');
+
+$ses->disconnect;
+