diff options
Diffstat (limited to 'leo.pl')
-rwxr-xr-x | leo.pl | 70 |
1 files changed, 68 insertions, 2 deletions
diff --git a/leo.pl b/leo.pl index c7c6da7..1964d43 100755 --- a/leo.pl +++ b/leo.pl @@ -4,9 +4,20 @@ use strict; use warnings; use feature 'say'; -use Path::Tiny; use IPC::Run3; +use Path::Tiny; +use Getopt::Long qw/ GetOptions /; + +my %options = (); +GetOptions( + \%options, + qw{ verbose } +) or die "Error in command line arguments\n"; + +# There will be multiple dispatch tables, to avoid confusion the main +# one is named %dispatch & others will be named like %archive_dispatch +# & so on. my %dispatch = ( "archive" => \&archive, ); @@ -23,5 +34,60 @@ if ( $ARGV[0] sub HelpMessage { say qq{Usage: archive - Create an archive.} + Create an archive.}; +} + +sub rsync { run3 ["openrsync", @_]; } +sub tar_create { run3 ["/bin/tar", "cf", @_]; } +sub tar_list { run3 ["/bin/tar", "tvf", @_]; } + +# Creating tars of files. +sub archive { + my %archive_dispatch = ( + "documents" => sub { + tar_create("/tmp/archive/documents.tar", + # Won't print "tar: Removing leading / from + # absolute path names in the archive" to + # STDERR. + "-C", "$ENV{HOME}/documents", "."); + + $? # tar returns 1 on errors. + ? die "Archive creation failed :: $?\n" + : say "$ENV{HOME}/documents archived."; + tar_list("/tmp/archive/documents.tar") if $options{verbose}; + }, + "journal" => sub { + tar_create("/tmp/archive/journal.tar", + "-C", "$ENV{HOME}/documents", + "andinus.org.gpg", "archive.org.gpg"); + + $? + ? die "Archive creation failed :: $?\n" + : say "$ENV{HOME}/documents/andinus.org.gpg, +$ENV{HOME}/documents/archive.org.gpg archived."; + tar_list("/tmp/archive/journal.tar") if $options{verbose}; + }, + ); + + shift @ARGV; + if ( $ARGV[0] + and $archive_dispatch{ $ARGV[0] } ) { + path("/tmp/archive")->mkpath; # Create archive directory. + $archive_dispatch{ $ARGV[0] }->(); + } elsif ( scalar @ARGV == 0 ) { + archive_HelpMessage(); + } else { + say "leo/archive: no such option"; + } + + sub archive_HelpMessage { + say qq{Archive files to /tmp/archive. + +Usage: + documents + Archive $ENV{HOME}/documents + journal + Archive $ENV{HOME}/documents/andinus.org.gpg, + $ENV{HOME}/documents/archive.org.gpg}; + } } |