#!/usr/bin/perl # # mvlog2dir: renames logfiles like YYYY-MM-DD (with optional # extensions like .gz) to YYYY/MM/DD, preserving any extensions # and making any needed directories. Existing files are NOT # overwritten. # # Reads input from find. while (<>) { chomp; $orig = $_; next unless -f $_; if (/(.*)(\d\d\d\d)-(\d\d)-(\d\d)(.*)/) { $pre = $1; $yr = $2; $mo = $3; $day = $4; $post = $5; mkdir "$yr", 0755 unless -d "$yr"; mkdir "$yr/$mo", 0755 unless -d "$yr/$mo"; die "mkdir $yr/$mo: $!\n" unless -d "$yr/$mo"; $new = sprintf ("%s%s/%s/%s%s", $pre, $yr, $mo, $day, $post); die "$new exists\n" if -f $new; print "$orig -> $new\n"; rename ($orig, $new) || die "rename $orig $new: $!\n"; } } exit (0);