Remove Spaces from file and directory names (perl)
The other day I moved a bunch of files from a windows server to a linux server. The files and directories on the windows server had spaces in them. Linux does not really like spaces in directory and file names.
I went looking around the net and could not find exactly what I wanted, so I took what I could find and modified it. At this point I cannot remember where I got the pieces, but the main brains for this script are not mine. Anyway here it is:
#!/usr/bin/perl -w # nospace /this/dir /that/dir /those/too use File::Find; use strict; die "usage: nospace dir[s]\n" unless @ARGV; my %ext; find(\&remspaces, @ARGV); sub remspaces { return if ($_ eq '.'); return if ($_ eq '..'); (my $new = $_) =~ tr/a-zA-Z0-9_.-/_/c; my $duplicate = ($new ne $_ and -e $new); my $try = $new; $ext{"$File::Find::dir/$try"}++ if $duplicate; while (my $count = $ext{"$File::Find::dir/$new"}++) { (my $with_num = $new) =~ s/(?=\.|$)/_$count/; $new = $with_num, last if not -e $with_num; } $ext{"$File::Find::dir/$try"}-- if $duplicate; rename $_ => $new or warn "can't rename $_ to $new: $!"; }
Copy above into a new file, save it as nospace, make it executable and run it by giving it a directory to work on. Thus if your files were in a directory called music call it with:
nospace music
Worked for me.