Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- $ cd workingdirectory
- $ perl6-m ../copyfnameascii.pl project copy
- $ tree
- .
- ├── copy
- │ ├── folder 1
- $ tree │ │ ├── cr.txt
- . │ │ └── es.txt
- └── project │ └── folder 2
- ├── folder%201 │ ├── ai.txt
- │ ├── čř.txt │ └── zy.txt
- │ └── ěš.txt ~*> └── project
- └── folder%202 ├── folder%201
- ├── áí.txt │ ├── čř.txt
- └── žý.txt │ └── ěš.txt
- └── folder%202
- ├── áí.txt
- └── žý.txt
- use Inline::Perl5;
- my $p5 = Inline::Perl5.new;
- $p5.use('Text::Unidecode');
- sub transformdirname($dirname is copy) {
- $dirname.=subst( /:i %(<[0..9A..F]>**2) /, { chr(:16(~$0)) }, :g ); # undo URL encoding
- $dirname.=subst( ///, '_', :g ); # make it a valid UNIX filename
- return $dirname;
- }
- sub transformfilename($filename) {
- return $p5.call('Text::Unidecode::unidecode', $filename); # make it ASCII at all costs
- }
- sub MAIN($fromdir, $todir) {
- for dir($fromdir) -> $subdir {
- unless $subdir ~~ :d {
- next;
- }
- my $tosubdir = $todir ~ '/' ~ transformdirname($subdir.basename);
- say $tosubdir;
- mkdir($tosubdir);
- for dir($subdir) -> $file {
- my $tofile = $tosubdir ~ '/' ~ transformfilename($file.basename);
- if $tofile.path ~~ :e {
- die("Will not overwrite $tofile");
- }
- copy($file, $tofile);
- }
- }
- }
- use Inline::Perl5;
- my $p5 = Inline::Perl5.new;
- $p5.use('Text::Unidecode');
- .
- .
- sub transformfilename($filename) {
- return $p5.call('Text::Unidecode::unidecode', $filename);
- }
- use Text::Unidecode:from<Perl5>;
- sub transformfilename($filename) {
- return Text::Unidecode::unidecode($filename);
- }
- sub transformdirname($dirname is copy) {
- $dirname.=subst( /:i %(<[0..9A..F]>**2) /, { chr(:16(~$0)) }, :g );
- $dirname.=subst( ///, '_', :g );
- return $dirname;
- }
- sub transformdirname($_ is copy) {
- .=subst( /:i %(<[0..9A..F]>**2) /, { chr(:16(~$0)) }, :g );
- .=subst( ///, '_', :g );
- }
- sub transformfilename($filename) {
- return $p5.call('Text::Unidecode::unidecode', $filename);
- }
- sub transformdirname($dirname is copy) {
- $dirname.=subst( /:i %(<[0..9A..F]>**2) /, { chr(:16(~$0)) }, :g ); # undo URL encoding
- $dirname.=subst( ///, '_', :g ); # make it a valid UNIX filename
- return $dirname;
- }
- #| undo URL encoding and make it a valid UNIX filename
- sub transformdirname($_ is copy) {
- .=subst( /:i %(<[0..9A..F]>**2) /, { chr(:16(~$0)) }, :g );
- .=subst( ///, '_', :g );
- }
- say &transformdirname.WHY;
- sub MAIN($fromdir, $todir) {
- use Text::Unidecode:from<Perl5>;
- # undo URL encoding and make it a valid UNIX filename
- sub transformdirname($_ is copy) {
- .=subst( /'%' (<xdigit>**2)/, { chr(:16(~$0)) }, :g );
- .=subst( ///, '_', :g );
- }
- sub MAIN ($fromdir, $todir) {
- for dir $fromdir {
- next unless .d;
- say my $tosubdir = "$todir/&transformdirname(.basename)";
- mkdir $tosubdir;
- for dir $subdir {
- # make filename ASCII at all costs:
- my $tofile = "$tosubdir/{.basename.&Text::Unidecode::unidecode}";
- die "Will not overwrite $_" if $tofile.path.e;
- copy $_, $tofile;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement