bin/archive-dir

Sun, 25 Jun 2023 22:40:31 -0500

author
Meredith Howard <mhoward@roomag.org>
date
Sun, 25 Jun 2023 22:40:31 -0500
changeset 1119
84cd2286f0bf
parent 761
21d7274d64a4
permissions
-rwxr-xr-x

Yeah, nix isn't for me yet.

476
0938f35f78f9 add archive-dir
Meredith Howard <mhoward@roomag.org>
parents:
diff changeset
1 #!/usr/bin/env perl
677
15d353917450 try using autofetch
Meredith Howard <mhoward@roomag.org>
parents: 549
diff changeset
2
549
0bd45054802e sort and format plan before working
Meredith Howard <mhoward@roomag.org>
parents: 529
diff changeset
3 use 5.014;
476
0938f35f78f9 add archive-dir
Meredith Howard <mhoward@roomag.org>
parents:
diff changeset
4 use warnings;
0938f35f78f9 add archive-dir
Meredith Howard <mhoward@roomag.org>
parents:
diff changeset
5 use strict;
677
15d353917450 try using autofetch
Meredith Howard <mhoward@roomag.org>
parents: 549
diff changeset
6
689
840057d4b493 portability improvement
Meredith Howard <mhoward@roomag.org>
parents: 677
diff changeset
7 use lib glob('~/.lib/perl5');
677
15d353917450 try using autofetch
Meredith Howard <mhoward@roomag.org>
parents: 549
diff changeset
8 use Autofetch;
15d353917450 try using autofetch
Meredith Howard <mhoward@roomag.org>
parents: 549
diff changeset
9
476
0938f35f78f9 add archive-dir
Meredith Howard <mhoward@roomag.org>
parents:
diff changeset
10 use Time::Piece;
0938f35f78f9 add archive-dir
Meredith Howard <mhoward@roomag.org>
parents:
diff changeset
11 use Path::Tiny;
0938f35f78f9 add archive-dir
Meredith Howard <mhoward@roomag.org>
parents:
diff changeset
12 use Getopt::Long::Descriptive;
0938f35f78f9 add archive-dir
Meredith Howard <mhoward@roomag.org>
parents:
diff changeset
13
0938f35f78f9 add archive-dir
Meredith Howard <mhoward@roomag.org>
parents:
diff changeset
14 sub main {
0938f35f78f9 add archive-dir
Meredith Howard <mhoward@roomag.org>
parents:
diff changeset
15 my ($opt, $usage) = describe_options(
0938f35f78f9 add archive-dir
Meredith Howard <mhoward@roomag.org>
parents:
diff changeset
16 'archive-dir %o <directory> ...',
761
21d7274d64a4 shuffle options
Meredith Howard <mhoward@roomag.org>
parents: 689
diff changeset
17 ['dest|d=s' => 'destination path' => {default => '.'}],
21d7274d64a4 shuffle options
Meredith Howard <mhoward@roomag.org>
parents: 689
diff changeset
18 ['fileinto|F=s' => 'file into, a strftime format', {default => '%Y'}],
21d7274d64a4 shuffle options
Meredith Howard <mhoward@roomag.org>
parents: 689
diff changeset
19 ['age|a=i' => "minimum age in days for archival", {default => 60}],
21d7274d64a4 shuffle options
Meredith Howard <mhoward@roomag.org>
parents: 689
diff changeset
20 ['files|f' => "operate on plain files only"],
21d7274d64a4 shuffle options
Meredith Howard <mhoward@roomag.org>
parents: 689
diff changeset
21 [],
21d7274d64a4 shuffle options
Meredith Howard <mhoward@roomag.org>
parents: 689
diff changeset
22 ['yes|Y' => "actually move stuff"],
21d7274d64a4 shuffle options
Meredith Howard <mhoward@roomag.org>
parents: 689
diff changeset
23 ['help|h' => "print usage message and exit", {shortcircuit => 1}],
21d7274d64a4 shuffle options
Meredith Howard <mhoward@roomag.org>
parents: 689
diff changeset
24 {show_defaults => 1}
476
0938f35f78f9 add archive-dir
Meredith Howard <mhoward@roomag.org>
parents:
diff changeset
25 );
485
a58682115510 print usage on no args too
Meredith Howard <mhoward@roomag.org>
parents: 477
diff changeset
26 print($usage->text), exit if $opt->help || !@ARGV;
476
0938f35f78f9 add archive-dir
Meredith Howard <mhoward@roomag.org>
parents:
diff changeset
27
0938f35f78f9 add archive-dir
Meredith Howard <mhoward@roomag.org>
parents:
diff changeset
28 archive_dir($opt, $_) for @ARGV;
0938f35f78f9 add archive-dir
Meredith Howard <mhoward@roomag.org>
parents:
diff changeset
29 }
0938f35f78f9 add archive-dir
Meredith Howard <mhoward@roomag.org>
parents:
diff changeset
30
0938f35f78f9 add archive-dir
Meredith Howard <mhoward@roomag.org>
parents:
diff changeset
31 sub archive_dir {
0938f35f78f9 add archive-dir
Meredith Howard <mhoward@roomag.org>
parents:
diff changeset
32 my $opt = shift;
0938f35f78f9 add archive-dir
Meredith Howard <mhoward@roomag.org>
parents:
diff changeset
33 my $dir = path(shift);
761
21d7274d64a4 shuffle options
Meredith Howard <mhoward@roomag.org>
parents: 689
diff changeset
34 my $destdir = path($opt->dest);
476
0938f35f78f9 add archive-dir
Meredith Howard <mhoward@roomag.org>
parents:
diff changeset
35 $destdir = $dir->child($destdir) if $destdir->is_relative;
761
21d7274d64a4 shuffle options
Meredith Howard <mhoward@roomag.org>
parents: 689
diff changeset
36 my $destfmt = $opt->fileinto;
476
0938f35f78f9 add archive-dir
Meredith Howard <mhoward@roomag.org>
parents:
diff changeset
37 my $nowish = time;
0938f35f78f9 add archive-dir
Meredith Howard <mhoward@roomag.org>
parents:
diff changeset
38 my $age = $opt->age * 24 * 60 * 60;
0938f35f78f9 add archive-dir
Meredith Howard <mhoward@roomag.org>
parents:
diff changeset
39
549
0bd45054802e sort and format plan before working
Meredith Howard <mhoward@roomag.org>
parents: 529
diff changeset
40 my @work;
0bd45054802e sort and format plan before working
Meredith Howard <mhoward@roomag.org>
parents: 529
diff changeset
41
476
0938f35f78f9 add archive-dir
Meredith Howard <mhoward@roomag.org>
parents:
diff changeset
42 for my $child ($dir->children) {
477
eeafc178ddc4 add -f for only plain files
Meredith Howard <mhoward@roomag.org>
parents: 476
diff changeset
43 next if $child->is_dir && (
eeafc178ddc4 add -f for only plain files
Meredith Howard <mhoward@roomag.org>
parents: 476
diff changeset
44 $opt->files || $child eq $destdir || $child =~ /^(?:\d{4}|\d\d)$/
eeafc178ddc4 add -f for only plain files
Meredith Howard <mhoward@roomag.org>
parents: 476
diff changeset
45 );
eeafc178ddc4 add -f for only plain files
Meredith Howard <mhoward@roomag.org>
parents: 476
diff changeset
46 next if $opt->files && $child->basename =~ /^\./;
476
0938f35f78f9 add archive-dir
Meredith Howard <mhoward@roomag.org>
parents:
diff changeset
47
0938f35f78f9 add archive-dir
Meredith Howard <mhoward@roomag.org>
parents:
diff changeset
48 my $mtime = $child->stat->mtime;
0938f35f78f9 add archive-dir
Meredith Howard <mhoward@roomag.org>
parents:
diff changeset
49 next unless ($nowish - $mtime) >= $age;
0938f35f78f9 add archive-dir
Meredith Howard <mhoward@roomag.org>
parents:
diff changeset
50
0938f35f78f9 add archive-dir
Meredith Howard <mhoward@roomag.org>
parents:
diff changeset
51 my $dest = $destdir->child(localtime($mtime)->strftime($destfmt));
549
0bd45054802e sort and format plan before working
Meredith Howard <mhoward@roomag.org>
parents: 529
diff changeset
52 push @work, [$dest, $child];
0bd45054802e sort and format plan before working
Meredith Howard <mhoward@roomag.org>
parents: 529
diff changeset
53 }
476
0938f35f78f9 add archive-dir
Meredith Howard <mhoward@roomag.org>
parents:
diff changeset
54
549
0bd45054802e sort and format plan before working
Meredith Howard <mhoward@roomag.org>
parents: 529
diff changeset
55 my $lastdest = '';
0bd45054802e sort and format plan before working
Meredith Howard <mhoward@roomag.org>
parents: 529
diff changeset
56 for my $work (sort {$a->[0] cmp $b->[0]} @work) {
0bd45054802e sort and format plan before working
Meredith Howard <mhoward@roomag.org>
parents: 529
diff changeset
57 my ($dest, $child) = @$work;
0bd45054802e sort and format plan before working
Meredith Howard <mhoward@roomag.org>
parents: 529
diff changeset
58
0bd45054802e sort and format plan before working
Meredith Howard <mhoward@roomag.org>
parents: 529
diff changeset
59 say $lastdest = $dest
0bd45054802e sort and format plan before working
Meredith Howard <mhoward@roomag.org>
parents: 529
diff changeset
60 if $dest ne $lastdest;
0bd45054802e sort and format plan before working
Meredith Howard <mhoward@roomag.org>
parents: 529
diff changeset
61
0bd45054802e sort and format plan before working
Meredith Howard <mhoward@roomag.org>
parents: 529
diff changeset
62 say "\t$child";
476
0938f35f78f9 add archive-dir
Meredith Howard <mhoward@roomag.org>
parents:
diff changeset
63
0938f35f78f9 add archive-dir
Meredith Howard <mhoward@roomag.org>
parents:
diff changeset
64 next unless $opt->yes;
0938f35f78f9 add archive-dir
Meredith Howard <mhoward@roomag.org>
parents:
diff changeset
65 $dest->mkpath;
0938f35f78f9 add archive-dir
Meredith Howard <mhoward@roomag.org>
parents:
diff changeset
66 $child->move($dest . '/' . $child->relative($dir));
0938f35f78f9 add archive-dir
Meredith Howard <mhoward@roomag.org>
parents:
diff changeset
67 }
0938f35f78f9 add archive-dir
Meredith Howard <mhoward@roomag.org>
parents:
diff changeset
68 }
0938f35f78f9 add archive-dir
Meredith Howard <mhoward@roomag.org>
parents:
diff changeset
69
0938f35f78f9 add archive-dir
Meredith Howard <mhoward@roomag.org>
parents:
diff changeset
70 main();

mercurial