Comando para separar los archivos por orden alfabético

  • joebert
  • Orange Lover
  • Genius
  • Avatar de Usuario
  • Registrado: Feb 10, 2004
  • Mensajes: 12460
  • Loc: FL
  • Status: Offline

Nota Noviembre 2nd, 2009, 1:47 pm

Básicamente, tengo una carpeta con miles de archivos en él y quiero dividir los archivos en carpetas. Podría continuar y hacer esto a través de ~ 26 veces,

BASH Código: [ Download ] [ Select ]
mkdir _a
mv a* _a/
mv _a/ a/
  1. mkdir _a
  2. mv a* _a/
  3. mv _a/ a/


Incluso si no recuerdo la última vez que los comandos utilizados para cada letra su todavía una molestia sin embargo.

Sería bueno tener un script bash podría llamar a algo como esto en su lugar,

BASH Código: [ Download ] [ Select ]
segregate /path/to/directory
Patience.
  • Anonymous
  • Bot
  • No Avatar
  • Registrado: 25 Feb 2008
  • Mensajes: ?
  • Loc: Ozzuland
  • Status: Online

Nota Noviembre 2nd, 2009, 1:47 pm

  • kc0tma
  • Web Master
  • Web Master
  • Avatar de Usuario
  • Registrado: Jul 20, 2007
  • Mensajes: 3081
  • Loc: Trout Creek, MT
  • Status: Online

Nota Noviembre 2nd, 2009, 2:51 pm

Usted podría hacer un script en perl para que esto ocurra. Sólo una conjetura quickie en bruto:

PERL Código: [ Download ] [ Select ]
my @alphabet = "a".."z";
 
foreach (@alphabet) {
  my $tmpdir = "_" . $_;
  my $folder = $_;
  my $md = "mkdir " . $_;
  my $copyfile = "mv " . $_ . "*";
  my $copyfolder = "mv " . $tmpdir . " " . $folder;
 
  system($md);
  system($copyfile);
  system($copyfolder);
}
 
  1. my @alphabet = "a".."z";
  2.  
  3. foreach (@alphabet) {
  4.   my $tmpdir = "_" . $_;
  5.   my $folder = $_;
  6.   my $md = "mkdir " . $_;
  7.   my $copyfile = "mv " . $_ . "*";
  8.   my $copyfolder = "mv " . $tmpdir . " " . $folder;
  9.  
  10.   system($md);
  11.   system($copyfile);
  12.   system($copyfolder);
  13. }
  14.  


Ellos simplemente hacer que script ejecutable y bastón en / usr / local / bin y ejecutarlo. Ese código se parece a un perro mordió en él y no he probado ni nada, yo casi solo pedo a cabo. Pero la idea básica que la esperanza.
Go to work, send your kids to school, follow fashion, act normal.
Walk on the pavement, watch tv, save for your old age, obey the law.
Repeat after me: I am free.
  • joebert
  • Orange Lover
  • Genius
  • Avatar de Usuario
  • Registrado: Feb 10, 2004
  • Mensajes: 12460
  • Loc: FL
  • Status: Offline

Nota Noviembre 2nd, 2009, 3:04 pm

Sí Ive consiguió casi un msj rápido escrito en PHP, pero si theres ya un comando como este sería impresionante. :D

/ / edit - Ahora que soy hecho, heres lo he usado.

PHP Código: [ Download ] [ Select ]
if($argc < 2)
{
   echo "USAGE: ./segregate directory1[, directory2, directoryN...]\n";
}
 
$switches      = array();
$directories   = array();
$subs       = 'abcdefghijklmnopqrstuvwxyz';
$subs_mask     = strtoupper($subs) . "{$subs}1234567890";
 
for($i = 1; $i < $argc; $i++)
{
   if($argv[$i][0] == '-')
   {
      $switches[] =& $argv[$i];
   }
   else
   {
      $directories[] =& $argv[$i];
   }
}
 
// TODO switches/options
 
foreach($directories as $dir)
{
   if(is_dir($dir))
   {
      for($i = 0; $i < 26; $i++)
      {
         mkdir("$dir/{$subs[$i]}");
      }
      mkdir("$dir/0-9");
      mkdir("$dir/misc");
     
      $dh  = opendir($dir);
      while (false !== ($f = readdir($dh)))
      {
         if(strspn($f, $subs_mask))
         {
            $d = strspn($f[0], '1234567890') ? '0-9' : strtolower($f[0]);
            if(is_file("$dir/$f") || (is_dir("$dir/$f") && strlen($f) > 1 && $f != '0-9' && $f != 'misc'))
            {
               rename("$dir/$f", "$dir/$d/$f");
            }
         }
         else if($f != '.' && $f != '..')
         {
            rename("$dir/$f", "$dir/misc/$f");
         }
      }
      closedir($dh);
   }
   unset($files);
}
  1. if($argc < 2)
  2. {
  3.    echo "USAGE: ./segregate directory1[, directory2, directoryN...]\n";
  4. }
  5.  
  6. $switches      = array();
  7. $directories   = array();
  8. $subs       = 'abcdefghijklmnopqrstuvwxyz';
  9. $subs_mask     = strtoupper($subs) . "{$subs}1234567890";
  10.  
  11. for($i = 1; $i < $argc; $i++)
  12. {
  13.    if($argv[$i][0] == '-')
  14.    {
  15.       $switches[] =& $argv[$i];
  16.    }
  17.    else
  18.    {
  19.       $directories[] =& $argv[$i];
  20.    }
  21. }
  22.  
  23. // TODO switches/options
  24.  
  25. foreach($directories as $dir)
  26. {
  27.    if(is_dir($dir))
  28.    {
  29.       for($i = 0; $i < 26; $i++)
  30.       {
  31.          mkdir("$dir/{$subs[$i]}");
  32.       }
  33.       mkdir("$dir/0-9");
  34.       mkdir("$dir/misc");
  35.      
  36.       $dh  = opendir($dir);
  37.       while (false !== ($f = readdir($dh)))
  38.       {
  39.          if(strspn($f, $subs_mask))
  40.          {
  41.             $d = strspn($f[0], '1234567890') ? '0-9' : strtolower($f[0]);
  42.             if(is_file("$dir/$f") || (is_dir("$dir/$f") && strlen($f) > 1 && $f != '0-9' && $f != 'misc'))
  43.             {
  44.                rename("$dir/$f", "$dir/$d/$f");
  45.             }
  46.          }
  47.          else if($f != '.' && $f != '..')
  48.          {
  49.             rename("$dir/$f", "$dir/misc/$f");
  50.          }
  51.       }
  52.       closedir($dh);
  53.    }
  54.    unset($files);
  55. }
Patience.

Publicar Información

  • Total de mensajes en este tema: 3 mensajes
  • Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 157 invitados
  • No puede abrir nuevos temas en este Foro
  • No puede responder a temas en este Foro
  • No puede editar sus mensajes en este Foro
  • No puede borrar sus mensajes en este Foro
  • No puede enviar adjuntos en este Foro
 
 

© 2010 Unmelted, LLC. Impulsado por phpBB © 2010 phpBB Group.