Befehl, um Dateien zu trennen nach Anfangsbuchstaben

  • joebert
  • Weathered
  • Genius
  • Benutzeravatar
  • Registriert: Feb 10, 2004
  • Beiträge: 11882
  • Loc: Clearwater, FL
  • Status: Offline

Beitrag November 2nd, 2009, 1:47 pm

Im Prinzip habe ich einen Ordner mit Tausenden von Dateien in ihm, und ich möchte diese Dateien in Ordner aufgeteilt. Ich könnte noch durch und tun dies ~ 26 Mal,

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


Auch wenn ich mich erinnere der letzten Befehle, die ich verwendet für jeden Buchstaben die noch einen stressfreien though.

Es wäre schön, ein Bash-Skript, ich könnte etwas davon haben, rufen statt,

BASH Code: [ Download ] [ Select ]
segregate /path/to/directory
Why yes, yes I am.
  • Anonymous
  • Bot
  • No Avatar
  • Registriert: 25 Feb 2008
  • Beiträge: ?
  • Loc: Ozzuland
  • Status: Online

Beitrag November 2nd, 2009, 1:47 pm

  • kc0tma
  • Web Master
  • Web Master
  • Benutzeravatar
  • Registriert: Jul 20, 2007
  • Beiträge: 2900
  • Loc: Trout Creek, MT
  • Status: Offline

Beitrag November 2nd, 2009, 2:51 pm

Sie könnten ein Perl-Script zu tun, um sie geschehen. Nur eine grobe Quickie erraten:

PERL Code: [ 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.  


Sie nur das Skript ausführbar machen und Stock in / usr / local / bin und starten. Dieser Code sieht aus wie ein Hund kaute sie und ich habe es bisher nicht testen oder so, hab ich ziemlich genau farted it out. Aber man gewöhnt sich die grundlegende Idee, hoffe ich.
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
  • Benutzeravatar
  • Registriert: Feb 10, 2004
  • Beiträge: 11882
  • Loc: Clearwater, FL
  • Status: Offline

Beitrag November 2nd, 2009, 3:04 pm

Yeah Ive got nur um eine schnelle Nummer in PHP geschrieben, aber wenn theres bereits ein Kommando so etwas wäre awesome. :D

/ / edit - Jetzt, Im getan, was ich heres verwendet.

PHP Code: [ 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.

Buchung Informationen

  • Beiträge in diesem Thema: 3 Beiträge
  • Mitglieder in diesem Forum: 0 Mitglieder und 101 Gäste
  • Du darfst keine neuen Themen in diesem Forum erstellen.
  • Du darfst keine Antworten zu Themen in diesem Forum erstellen.
  • Du darfst deine Beiträge in diesem Forum nicht ändern.
  • Du darfst deine Beiträge in diesem Forum nicht löschen.
  • Du darfst keine Dateianhänge in diesem Forum erstellen.
 
 

© Unmelted Enterprises 1998-2009. Angetrieben durch phpBB © 2001-2009 phpBB Group.