Advertisement
Guest User

Untitled

a guest
Jun 19th, 2019
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.58 KB | None | 0 0
  1. $ cd workingdirectory
  2. $ perl6-m ../copyfnameascii.pl project copy
  3.  
  4. $ tree
  5. .
  6. ├── copy
  7. │   ├── folder 1
  8. $ tree │   │   ├── cr.txt
  9. . │   │   └── es.txt
  10. └── project │   └── folder 2
  11. ├── folder%201 │   ├── ai.txt
  12. │   ├── čř.txt │   └── zy.txt
  13. │   └── ěš.txt ~*> └── project
  14. └── folder%202 ├── folder%201
  15. ├── áí.txt │   ├── čř.txt
  16. └── žý.txt │   └── ěš.txt
  17. └── folder%202
  18. ├── áí.txt
  19. └── žý.txt
  20.  
  21. use Inline::Perl5;
  22. my $p5 = Inline::Perl5.new;
  23. $p5.use('Text::Unidecode');
  24.  
  25. sub transformdirname($dirname is copy) {
  26. $dirname.=subst( /:i %(<[0..9A..F]>**2) /, { chr(:16(~$0)) }, :g ); # undo URL encoding
  27. $dirname.=subst( ///, '_', :g ); # make it a valid UNIX filename
  28. return $dirname;
  29. }
  30.  
  31. sub transformfilename($filename) {
  32. return $p5.call('Text::Unidecode::unidecode', $filename); # make it ASCII at all costs
  33. }
  34.  
  35. sub MAIN($fromdir, $todir) {
  36. for dir($fromdir) -> $subdir {
  37. unless $subdir ~~ :d {
  38. next;
  39. }
  40. my $tosubdir = $todir ~ '/' ~ transformdirname($subdir.basename);
  41. say $tosubdir;
  42. mkdir($tosubdir);
  43. for dir($subdir) -> $file {
  44. my $tofile = $tosubdir ~ '/' ~ transformfilename($file.basename);
  45. if $tofile.path ~~ :e {
  46. die("Will not overwrite $tofile");
  47. }
  48. copy($file, $tofile);
  49. }
  50. }
  51. }
  52.  
  53. use Inline::Perl5;
  54. my $p5 = Inline::Perl5.new;
  55. $p5.use('Text::Unidecode');
  56. .
  57. .
  58. sub transformfilename($filename) {
  59. return $p5.call('Text::Unidecode::unidecode', $filename);
  60. }
  61.  
  62. use Text::Unidecode:from<Perl5>;
  63.  
  64. sub transformfilename($filename) {
  65. return Text::Unidecode::unidecode($filename);
  66. }
  67.  
  68. sub transformdirname($dirname is copy) {
  69. $dirname.=subst( /:i %(<[0..9A..F]>**2) /, { chr(:16(~$0)) }, :g );
  70. $dirname.=subst( ///, '_', :g );
  71. return $dirname;
  72. }
  73.  
  74. sub transformdirname($_ is copy) {
  75. .=subst( /:i %(<[0..9A..F]>**2) /, { chr(:16(~$0)) }, :g );
  76. .=subst( ///, '_', :g );
  77. }
  78.  
  79. sub transformfilename($filename) {
  80. return $p5.call('Text::Unidecode::unidecode', $filename);
  81. }
  82.  
  83. sub transformdirname($dirname is copy) {
  84. $dirname.=subst( /:i %(<[0..9A..F]>**2) /, { chr(:16(~$0)) }, :g ); # undo URL encoding
  85. $dirname.=subst( ///, '_', :g ); # make it a valid UNIX filename
  86. return $dirname;
  87. }
  88.  
  89. #| undo URL encoding and make it a valid UNIX filename
  90. sub transformdirname($_ is copy) {
  91. .=subst( /:i %(<[0..9A..F]>**2) /, { chr(:16(~$0)) }, :g );
  92. .=subst( ///, '_', :g );
  93. }
  94.  
  95. say &transformdirname.WHY;
  96.  
  97. sub MAIN($fromdir, $todir) {
  98.  
  99. use Text::Unidecode:from<Perl5>;
  100.  
  101. # undo URL encoding and make it a valid UNIX filename
  102. sub transformdirname($_ is copy) {
  103. .=subst( /'%' (<xdigit>**2)/, { chr(:16(~$0)) }, :g );
  104. .=subst( ///, '_', :g );
  105. }
  106.  
  107. sub MAIN ($fromdir, $todir) {
  108.  
  109. for dir $fromdir {
  110.  
  111. next unless .d;
  112.  
  113. say my $tosubdir = "$todir/&transformdirname(.basename)";
  114. mkdir $tosubdir;
  115.  
  116. for dir $subdir {
  117. # make filename ASCII at all costs:
  118. my $tofile = "$tosubdir/{.basename.&Text::Unidecode::unidecode}";
  119. die "Will not overwrite $_" if $tofile.path.e;
  120. copy $_, $tofile;
  121. }
  122. }
  123. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement