Comando para separar los archivos por orden alfabético

  • joebert
  • Weathered
  • Genius
  • Avatar de Usuario
  • Registrado: Feb 10, 2004
  • Mensajes: 11879
  • Loc: Clearwater, 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
Why yes, yes I am.
  • 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: 2900
  • Loc: Trout Creek, MT
  • Status: Offline

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.
My water bottles froze as I rode, as did my beard. Beards sure keep you warm,
but can be socially embarrassing when you start to defrost mid conversation.

My journey into the subconscious mind.
  • joebert
  • Weathered
  • Genius
  • Avatar de Usuario
  • Registrado: Feb 10, 2004
  • Mensajes: 11879
  • Loc: Clearwater, 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. }
Why yes, yes I am.

Publicar Información

  • Total de mensajes en este tema: 3 mensajes
  • Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 125 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
 
 

© Unmelted Enterprises 1998-2009. Impulsado por phpBB © 2001-2009 phpBB Group.