make_filenames_portable.pl 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. #!/usr/bin/perl
  2. # Author: Daniel "Trizen" Șuteu
  3. # License: GPLv3
  4. # Date: 16 June 2014
  5. # Website: https://github.com/trizen
  6. # Replace unsafe characters with safe characters in filenames
  7. # making the files portable to another FS (like FAT32)
  8. use 5.014;
  9. use strict;
  10. use autodie;
  11. use warnings;
  12. use Getopt::Std qw(getopts);
  13. use File::Spec::Functions qw(catfile);
  14. sub usage {
  15. my ($code) = @_;
  16. print <<"EOT";
  17. usage: $0 [options] [dir1] [dir2] [...]
  18. options:
  19. -r : rename the files
  20. -h : print this message
  21. example:
  22. $0 -r /my/dir
  23. EOT
  24. exit $code;
  25. }
  26. # Parse arguments
  27. getopts('rh', \my %opt);
  28. usage(0) if $opt{h};
  29. usage(2) if !@ARGV;
  30. # Iterate over directories
  31. while (defined(my $dir = shift @ARGV)) {
  32. opendir(my $dir_h, $dir);
  33. while (defined(my $file = readdir($dir_h))) {
  34. my $orig_name = catfile($dir, $file);
  35. if (-f $orig_name and $file =~ tr{:"*/?\\|}{;'+%$%%}) {
  36. my $new_name = catfile($dir, $file);
  37. say "$orig_name -> $new_name";
  38. rename($orig_name, $new_name) if $opt{r};
  39. }
  40. }
  41. closedir($dir_h);
  42. }