parent
04d5563cf7
commit
2000c502d8
@ -0,0 +1,67 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Just a normal copy program, BUT it never overwrites a file in the destination.
|
||||
# if the filename is already taken, the new file will get an incrementing number as postfix added just in fron of the dot before the extension.
|
||||
# no extension, its added the end.
|
||||
# example: filename.wav already exists, new file will get the name filename_1.wav.
|
||||
#
|
||||
# usage cp_keep.sh [src file] [dest folder] [prefix newfile]
|
||||
|
||||
|
||||
export IFS=$'\n';
|
||||
export src=$1;
|
||||
export dst=$2;
|
||||
export prefix=$3
|
||||
|
||||
if [ -z $1 ]; then {
|
||||
echo "must specify source file";
|
||||
exit;
|
||||
} fi
|
||||
|
||||
if [ -z $2 ]; then {
|
||||
echo "must specify destination directory";
|
||||
exit;
|
||||
} fi
|
||||
|
||||
|
||||
if [ ! -d $2 ]; then {
|
||||
echo "destination must be a directory";
|
||||
exit;
|
||||
} fi
|
||||
|
||||
if [ -d $1 ]; then {
|
||||
echo "$1 is directory. .. quitting.";
|
||||
exit;
|
||||
} fi
|
||||
|
||||
export src_dir=$(dirname $src);
|
||||
export src_file=$(basename $src);
|
||||
|
||||
|
||||
if [ "$dst" -ef "$src_dir" ]; then {
|
||||
echo "source and destiation are same directory... quitting"
|
||||
exit;
|
||||
} fi
|
||||
|
||||
export fname_new=$prefix$src_file;
|
||||
|
||||
count=1;
|
||||
while [ -e $dst/$fname_new ]; do { #destination filename already taken?
|
||||
#add suffix before any dot, if no dot just append
|
||||
if [[ "$fname_new" =~ \. ]]; then {
|
||||
fname_new=$(echo $fname_new | sed -e "s/\./_$count\./g");
|
||||
} else {
|
||||
fname_new=$fname_new"_$count"
|
||||
} fi
|
||||
# echo "filename already taken, suffix added: $dst/$fname_new"
|
||||
count=$(($count+1));
|
||||
} done
|
||||
|
||||
if [ "$count" -gt 1 ]; then {
|
||||
echo "$dst/$src_file already existed, new name: $fname_new";
|
||||
} fi
|
||||
|
||||
export cmd="cp \"$src_dir/$src_file\" \"$dst/$fname_new\"";
|
||||
|
||||
#echo $cmd;
|
||||
eval $cmd;
|
@ -0,0 +1,104 @@
|
||||
#!/usr/bin/perl
|
||||
|
||||
my $help = <<'END_HELP';
|
||||
Sampling tool File Renamer
|
||||
usage: renamer.pl DIR SEARCHREGEX REPLACEREGEX DOIT
|
||||
|
||||
for every regular file in DIR, sorted by mtime,
|
||||
replaces the SEARCHREGEX with REPLACEREGEX in every filename.
|
||||
Does NOT rename anything unless DOIT!
|
||||
|
||||
Special Variables are:
|
||||
%NR% - the index number for the file with the current sorting
|
||||
|
||||
no captures support in regex :(
|
||||
END_HELP
|
||||
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use Data::Dumper qw(Dumper);
|
||||
use POSIX qw(strftime);
|
||||
use Cwd;
|
||||
use File::stat;
|
||||
|
||||
my $dir = "-?";
|
||||
$dir = $ARGV[0];
|
||||
my $regexSearch = $ARGV[1];
|
||||
my $regexReplace = $ARGV[2];
|
||||
my $reallyDoIt = $ARGV[3];
|
||||
|
||||
if ($dir eq "-?") {
|
||||
usage();
|
||||
}
|
||||
|
||||
if(!$dir) {
|
||||
print "Error: Need a directory.\n";
|
||||
die "\n";
|
||||
}
|
||||
if(!$regexSearch) {
|
||||
print "Error: Need a search regex.\n";
|
||||
die "\n";
|
||||
}
|
||||
if(!$regexReplace) {
|
||||
print "Error: Need a replace regex.\n\n";
|
||||
die "\n";
|
||||
}
|
||||
|
||||
chdir($dir) || die "FATAL: cant chdir";
|
||||
|
||||
print getcwd()."\n";
|
||||
|
||||
opendir( DIR, getcwd() );
|
||||
my @files = readdir(DIR);
|
||||
closedir(DIR);
|
||||
|
||||
#filter out dirs
|
||||
my @filesNoDir;
|
||||
foreach (@files) {
|
||||
if(! -d $_) {
|
||||
push(@filesNoDir,$_);
|
||||
}
|
||||
}
|
||||
|
||||
@files = @filesNoDir;
|
||||
|
||||
my @sorted_files = sort { stat($a)->mtime <=> stat($b)->mtime } @files;
|
||||
|
||||
my $fname = "";
|
||||
my $fstat = "";
|
||||
my $mtime = "";
|
||||
|
||||
my $fname_new = "";
|
||||
my $counter = 1;
|
||||
my $regexReplaceNew = "";
|
||||
my $counterFmt;
|
||||
for (@sorted_files) {
|
||||
$fname = $_;
|
||||
$fstat = stat($_);
|
||||
$mtime = strftime('%Y/%m/%d %H:%M:%S',localtime($fstat->mtime));
|
||||
|
||||
$regexReplaceNew = $regexReplace;
|
||||
$counterFmt = sprintf("%03s",$counter);
|
||||
$regexReplaceNew =~ s/%NR%/$counterFmt/g;
|
||||
|
||||
$fname_new = $fname;
|
||||
$fname_new =~ s/$regexSearch/$regexReplaceNew/;
|
||||
# $fname_new =~ s/(.*?)\s1-/%NR%_$1/;
|
||||
|
||||
printf "%-40s%-40s%-20s\n",$fname_new,$fname,$mtime;
|
||||
|
||||
if($reallyDoIt) {
|
||||
rename($fname,$fname_new);
|
||||
}
|
||||
|
||||
$counter++;
|
||||
}
|
||||
|
||||
|
||||
|
||||
sub usage {
|
||||
print $help;
|
||||
die "\n";
|
||||
}
|
@ -0,0 +1,60 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Replaces odd characters in filenames and directories with an underline
|
||||
# When there are more consecutive odd characters what would result in ____ sth like this, it collates to a single underline.
|
||||
# When the new unixified filename is already taken, a counted suffix will be added before an eventuel period in the filename, otherwise just append.
|
||||
# Will never overwrite a file.
|
||||
|
||||
# usage: inixify.sh [filename]
|
||||
# filename The file to unixify, can be file or folder.
|
||||
|
||||
|
||||
export IFS=$'\n';
|
||||
export fname_full=$1;
|
||||
#export out=$2;
|
||||
|
||||
function sanitise {
|
||||
local retval=$(echo $1 | gsed -e 's/[^A-Za-z0-9#./_-]/_/g'); # replace everything else with _
|
||||
retval=$(echo $retval | gsed -e 's/\.\{2,\}/\./g'); # replace >1 consecutive . with one .
|
||||
retval=$(echo $retval | gsed -e 's/_\{2,\}/_/g'); # replace >1 consecutive _ with one _
|
||||
|
||||
echo $retval;
|
||||
}
|
||||
|
||||
export current_dir=$(dirname $fname_full);
|
||||
export current_file=$(basename $fname_full);
|
||||
|
||||
export fname_new=$(sanitise $current_file); # unixify
|
||||
|
||||
if [ "$current_file" != "$fname_new" ]; then { #any changes been needed?
|
||||
|
||||
count=1;
|
||||
while [ -e $current_dir/$fname_new ]; do { #new filename already taken?
|
||||
#echo file exists: $current_dir/$fname_new;
|
||||
|
||||
#add suffix before any dot, if no dot just append
|
||||
if [[ "$fname_new" =~ \. ]]; then {
|
||||
fname_new=$(echo $fname_new | sed -e "s/\./_$count\./g");
|
||||
} else {
|
||||
fname_new=$fname_new"_$count"
|
||||
} fi
|
||||
|
||||
count=$(($count+1));
|
||||
} done
|
||||
|
||||
echo -n $current_dir/$fname_new
|
||||
|
||||
if [ "$count" -gt 1 ]; then {
|
||||
echo " suffix nr added: $(($count-1))";
|
||||
} else {
|
||||
echo "";
|
||||
} fi
|
||||
|
||||
export cmd="mv \"$fname_full\" \"$current_dir/$fname_new\"";
|
||||
|
||||
# echo $cmd;
|
||||
eval $cmd;
|
||||
} else {
|
||||
echo -ne;
|
||||
echo $fname_full" filename already ok.";
|
||||
} fi
|
Loading…
Reference in new issue