Alle Dateien eines Ordners umbennenen

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von tommyboy, 26.12.2007.

  1. #1 tommyboy, 26.12.2007
    tommyboy

    tommyboy Grünschnabel

    Dabei seit:
    26.12.2007
    Beiträge:
    4
    Zustimmungen:
    0
    Hallo Forum,

    ich benutze einen Mac, allerdings möchte ich mir ein Shellskript basteln und habe allerdings keine Ahnung wie! Bin absolute neu in Unix!

    Es sollte folgendes machen:

    Eine Datei aus dem Ordner lesen, dann die Rechte so verbiegen, dass das Skript die Datei umbennenen kann. Wenn das Skript das darf, dann den alten Präfix durch 1 ersetzen. Bei der nächsten Datei das gleiche, nur der Präfix wird um eins erhöht. So sollten alle Dateien in dem Ordner umbenannt werden, egal ob die rechte nicht stimmen, weil Sie evtl. von Windoof kommen und egal wenn die Datei schon 1.doc heißt. Habe ein Tool aufm Mac, aber das geht bei 30000 einzelnen Dateien in die Knie! Und wenn die Rechte nit stimmen kann es einzelne Dateien nicht umbennenen, dass nervt.

    Hat jemand sowas oder würde er mir beim basteln, aufrufen helfen?

    Mfg
    Tommyboy PS:Frohhes Weihnachten!
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 slackfan, 26.12.2007
    slackfan

    slackfan König

    Dabei seit:
    18.04.2006
    Beiträge:
    809
    Zustimmungen:
    0
    Ort:
    Bonn
    Lösung in PHP

    Hallo,

    das ist zwar jetzt kein Bash-Skript sondern ein PHP-Skript, aber es funktioniert.

    PHP:
    #!/usr/bin/php

    <?php

    $path 
    $argv[1];
    $user 'tommyboy';
    $group 'users';
    $permissions '755';
    $prefix '1_';

    function 
    get_username($uid) { // Hilfsfunktion um den Benutzernamen aus der uid zu generieren
        
    $username posix_getpwuid($uid);
        return 
    $username['name'];
    }

    if (
    $handle opendir($path)) {
        while (
    false !== ($file readdir($handle))) {
            if (
    $file != "." && $file != "..") {

                if(
    is_file($file) == true) { // Kontrolle ob aktueller Verzeichnisinhalt eine Datei ist

                    
    if(get_username(fileowner($file)) != $user) {
                        
    system('chown '.$user.':'.$group.' '.$file); //Eigentümer setzen, Benutze externen Befehl, um den PHP-SafeMode zu umgehen
                    
    }
                    
    system('chmod '.$permissions.' '.$file); // Zugriffsrechte setzen, Benutze externen Befehl, um den PHP-SafeMode zu umgehen
                    
    $newfile $prefix.$file;

                    echo 
    $file.' wird umbenannt in '.$newfile;
                    
    rename($file$newfile);
                    if(
    is_file($newfile) == true) {
                        echo 
    'Erfolgreich!'."\n";
                    }
                    else {
                        
    $error[] = 'Beim Umbenennen von '.$file.' in '.$newfile.'trat ein Fehler auf';
                    }
                }
            }
        }
        
    closedir($handle);
    }

    if(isset(
    $error)) {
        echo 
    "\n\n".'======================='."\n\n";
        foreach(
    $error as $entry) {
            echo 
    $entry."\n";
        }
    }
    else {
        echo 
    "\n\n".'======================='."\n\n".'Alle Operationen erfolreich beendet. ';
    }

    ?>
    Funktionsweise:
    Erwartet als Parameter das Verzeichnis, dessen Inhalte umbenannt werden sollen. Die Einstellungen für dein System kannst du im Kopf vornehmen.

    Was hier jetzt nicht dabei ist, ist die Option eines rekursiven Durchlaufs, aber das kann man ja hineinbasteln.

    Es muss natürlich mit Rechten gestartet werden, die ein Ändern des Benutzers erlauben und ob und wie PHP auf dem Mac arbeitet, bzw. wo die Executable liegt weiß ich auch nicht.

    Wie stabil das bei 30000 Dateien ist kann ich natürlich nicht sagen. Wahrscheinlich nicht sehr stabil...
     
  4. sinn3r

    sinn3r Law & Order
    Moderator

    Dabei seit:
    28.12.2006
    Beiträge:
    2.764
    Zustimmungen:
    0
    Ort:
    Wentorf
    instabil wird es nicht werden denke ich, aber es wird wohl die maximale skriptlaufzeit des webservers sprengen?
     
  5. #4 slackfan, 26.12.2007
    slackfan

    slackfan König

    Dabei seit:
    18.04.2006
    Beiträge:
    809
    Zustimmungen:
    0
    Ort:
    Bonn
    Das ist ein Skript für die Kommandozeile. Das läuft nicht auf einem Webserver. Das sieht man auch am Shebang :-)
     
  6. #5 tommyboy, 26.12.2007
    tommyboy

    tommyboy Grünschnabel

    Dabei seit:
    26.12.2007
    Beiträge:
    4
    Zustimmungen:
    0
    Hallo ich brauch kein Php ich möchte in eine Shell von Unix nen Befehl eingeben oder nen kleines Skript haben, dass ich dann von der Shell aufrufen kann. Ich habe keinen Webserver sondern nen Mac der bietet ne shell zur Verfügung.

    So in der Art: habe ich im Forum gefunden.
     
  7. sinn3r

    sinn3r Law & Order
    Moderator

    Dabei seit:
    28.12.2006
    Beiträge:
    2.764
    Zustimmungen:
    0
    Ort:
    Wentorf
    argh.... wieder brille und hirn abgelegt... :|
     
  8. #7 Wolfgang, 26.12.2007
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Um das aus der Shell durchzuführen, rate ich dir das Verzeichnis vorher als root mit den Rechten auszustatten.
    Code:
    chown -R user /absolut/path/
    Dann kannst du ein sehr simples Script oder direkten Befehl laufen lassen.
    Du musst allerdings den Prefix anpassen , also <PREFIX> durch deinen ersetzen.
    Code:
    C=0;for I in $(find ./ -type f -name "<PREFIX>*"); do echo $I ${I/<PREFIX>/$((C++))_};done;
    
    Gruß Wolfgang
     
  9. #8 tommyboy, 27.12.2007
    tommyboy

    tommyboy Grünschnabel

    Dabei seit:
    26.12.2007
    Beiträge:
    4
    Zustimmungen:
    0
    Naja so ganz ist das nit was ich wollte. Es soll jede Datei aufsteigend nummeriert werden. also das am Ende die dateien im Ordner die Namen 1.txt,2.txt,3.txt,4.txt.... haben. Fehlt da nicht eine Zählschleife?

    Mfg
    Tommyboy
     
  10. #9 Wolfgang, 27.12.2007
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hast du es probiert?
    Natürlich wird gezählt.
    Was meinst du wohl was $((C++)) macht?
     
  11. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  12. #10 tommyboy, 27.12.2007
    Zuletzt bearbeitet: 27.12.2007
    tommyboy

    tommyboy Grünschnabel

    Dabei seit:
    26.12.2007
    Beiträge:
    4
    Zustimmungen:
    0
    Hi,

    also wenn ich den code so in die shell kopiere und ausführe tut sich nix, habe als Präfix 1 eingesetzt, war das falsch? Die Dateien werden aufgelistet haben aber noch den selben namen wie vorher? Ich möchte halt dass jede Datei umbenannt wird, aber wenn ich denn Code eingebe, wird nur der Ordnerinhalt ausgegeben.

    Gruß Tommyboy
     
  13. #11 Wolfgang, 27.12.2007
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Ja!
    Schau dir mal die Manpage zu find an.

    Wenn du alle Dateien die mit "myfile" beginnen willst, dann ist Prefix "myfile".
    Willst du alle Dateien (egal welchen Namen sie haben) eine Incrementalzahl voranstellen.
    Dann gibt es keinen Prefix, das gilt auch für die Auswahl nach einem Suffix
    Verschiebt alle Dateien von name nach <ZIFFER>_name.
    Code:
    C=0;for I in $(find ./ -type f ); do echo "$I" $(dirname "$I" )/$((C++))_$(basename "$I");done;
    Gruß Wolfgang
     
Thema:

Alle Dateien eines Ordners umbennenen

Die Seite wird geladen...

Alle Dateien eines Ordners umbennenen - Ähnliche Themen

  1. Alle Dateien eines Verzeichnisses mit einer anderen Datei vergleichen

    Alle Dateien eines Verzeichnisses mit einer anderen Datei vergleichen: Hallo, ich habe ein Verzeichnis, darin enthalten sind mehrere Dateien. Nun möchte ich alle Dateien (Parameter $1) gegen eine konstante Datei...
  2. Alle Textdateien eines Verzeichnisses mit Header ausstatten

    Alle Textdateien eines Verzeichnisses mit Header ausstatten: Hallo liebe Community. Ich soll ein Script schreiben, welches innerhalb von einem Verzeichnis alle .txt Dateien mit einer beliebigen ersten...
  3. Paralleles packen von Dateien

    Paralleles packen von Dateien: Sehr geehrte Dame und Herren, ich bin neu hier im forum deshalb begrüsse ich alle recht herzlich :). Ich habe ein Problem, ich habe auf...
  4. index.php funktioniert aber alle andere .php Dateien nicht

    index.php funktioniert aber alle andere .php Dateien nicht: Ich hab auf meinen Notebook apache2 installiert mit php5 und mysql. Ich hab das problem das er mit den php code nicht ausführt. Besser gesagt...
  5. Samba zeigt nicht alle Dateien an

    Samba zeigt nicht alle Dateien an: Nabend, ich habe das Problem, dass mein Samba Server, der bis gestern Abend immer richtig funktioniert hat und an dessen Konfiguration ich...