Aug 4th, 2003
under
Programming
Perl
Gist
This script will append an extension to the end of the given files, optionally removing any existing extensions. Don’t ask me why I wrote this, must have been important at one point in time. Alot easier to do this via find in un*x. Giving the following files in a directory:
. file2.log
.. file3.errors
file1.doc file4.log
Running chext -d txt *.log the follow is the results to the above files:
. file2.txt
.. file3.errors
file1.doc file4.txt
#!/usr/local/bin/perl
# Copyright (C) 1998 Andrew Loree
# $Id: chext.pl,v 1.1.1.1 2003/10/05 21:51:29 andy Exp $
############################################################################
#
# chext - Change file extenstions to 'ext', appending them to the end of the
# file. Optionally, all other extension can be dropped. Type
# 'chext' at the shell prompt for specific usage
#
############################################################################
$version = " 1.0 ";
if ( $#ARGV < 1 ){ # Check arguments
print <<END_of_usage;
usage: chext [-d] \'ext\' files
version $version
Changes file extension to \'ext\', by appending to the end of the file. The \'ext\' should not contain a \'.\'
-d Optionally, drop all other extensions, and then replace them with
\'ext\'
Copyright (c) 1998, Andrew Loree
END_of_usage
exit ( - 1 );
}
if ( $ARGV [ 0 ] eq " -d "){
$opt_d = 1 ;
shift ( @ARGV );
}
$ext = $ARGV [ 0 ]; # Process the extension
if ( $ext !~ /^\./ ){
$ext = " . $ext "; # Add . at the begining if needed
}
# Remove the first ARGV, it's the ext
shift ( @ARGV );
foreach $old_filename ( @ARGV ){ # Process the files
if ( - f $old_filename ){
if ( $opt_d ){ # Drop all other extensions
$new_filename = $old_filename ;
if ( $old_filename !~ /\./ ){
$new_filename = $old_filename . $ext ;
}
else {
$new_filename =~ s/\.(.*)/$ext/ ;
}
}
else {
$new_filename = $old_filename . $ext ;
}
if ( $new_filename eq $old_filename ){ # Don't bother if same name
next ;
}
if ( - f $new_filename ){ # New file already exists
print " The file \ ' $new_filename \ ' already exists. Replace it [y|n] ? ";
$answer = < STDIN > ;
if ( $answer !~ /^y/i ){
next ; # Next file
}
}
if ( rename ( $old_filename , $new_filename ) == 0 ){
print " Unable to rename $old_filename to $new_filename \n ";
}
}
else {
print " Invalid filename: $old_filename \n ";
}
}