#!/usr/bin/perl -w
#
# $Revision: 1.4 $ $Date: 2012-07-26 17:11:48-04 $
# $Source: /home/vogelke/bin/RCS/mv2inode,v $
# $Host: sys7.com $
# $UUID: 12b4a64b-7d8d-3d3d-bdf6-0725b5c6c61f $
#
#<mv2inode: rename each regular file on command line as its inode number.
# Optionally print mv commands for restoring original names to stdout.

use strict;
use File::Basename;

my ($dev, $dir, $file, $ino, $mode);
my $quiet = 1;  # FIXME: should be an option

foreach $file (@ARGV) {
    unless (-f $file) {
        warn "$file is not a regular file, skipping\n";
	next;
    }

    ($dev, $ino, $mode) = stat($file);
    die "$file: cannot stat: $!\n" unless defined($ino);

    # Has file already been renamed?
    if (basename($file) eq $ino) {
        warn "$file is already named after inode, skipping\n";
	next;
    }

    # Rename or warn.
    $dir = dirname($file);
    if (rename("$file", "$dir/$ino")) {
        print "/bin/mv $dir/$ino $file\n" unless $quiet;
    }
    else {
        warn "$file -> $dir/$ino: $!\n";
    }
}

exit(0);
