summaryrefslogtreecommitdiffstats
path: root/.local/bin/unixize
blob: 1a0d0ea2e8febe7a1fc42d3dc8aa3abfa8053930 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#!/usr/local/bin/perl

use warnings;
use strict;
use File::Copy qw/mv/;

sub get_og_files
{
	my @og_files;

	opendir(DIR, '.') or die $!;
	while (readdir(DIR)) {
		next if ($_ =~ m/^\./);
		push @og_files, $_;
	}
	closedir(DIR);
	return @og_files;
}

sub get_new_files
{
	my @og_files = @_;
	my @new_files;

	foreach (@og_files) {
		$_ =~ s/\ -\ /-/g;
		$_ =~ s/\_-\_/-/g;
		$_ =~ s/\ /_/g;
		$_ =~ s/[\$#@~!&*%()\[\];,:?^`\\\/<>|]+/-/g;
		$_ = lc($_);
		push @new_files, $_;
	}
	return @new_files;
}

sub main
{
	my @og_files;
	my @new_files;
	my @files;

	@og_files = get_og_files();
	@new_files = get_new_files(@og_files);
	while (@og_files || @new_files) {
		$files[0] = shift @og_files;
		$files[1] = shift @new_files;
		if (@ARGV == 1 && $ARGV[0] eq '-R' && -d $files[0]) {
			chdir($files[0]) or die $!;
			main();
			chdir('../');
		}
		next if (-e $files[1]);
		mv($files[0], $files[1]) or print STDERR $! . "\n";
		print "'". $files[0] . "' -> '" . $files[1] . "'\n";
	}
	return;
}

main();

__END__