ich stand gestern vor der Aufgabe, eine größere Menge von Dateinamen in Kleinbuchstaben umzuwandeln. Da ich mit der Bash Programmierung noch nicht wirklich fit bin, habe ich mir ein Shell Script in PHP geschrieben, das auch wunderbar seinen Zweck erfüllt.
Jetzt würde mich aber trotzdem interessieren, ob und wie das mit einem Bash Script gegangen wäre.
Für diejenigen, die es interessiert, hab ich mal mein PHP Skript angehängt:
Code: Select all
#!/usr/local/bin/php
<?php
// +---------------------------------------------------------------------+
// | Konverter um Dateinamen in Kleinbuchstaben umzuwandeln |
// +---------------------------------------------------------------------+
// | Alle Dateinamen im als Parameter angegebenen Verzeichnis werden in |
// | Kleinbuchstaben umgewandelt. Wenn kein Parameter angegeben wird, |
// | wird das aktuelle Verzeichnis genommen. |
// | Aufruf: convFileNameToLower.php [OPTIONEN] |
// +---------------------------------------------------------------------+
// PEAR Modul zur Verabeitung der Kommandozeilenparameter
require_once 'Console/Getopt.php';
/**
* @return void
* @desc Hilfetext ausgeben
*/
function usage() {
echo "Verwendung: convFileNameToLower.php [OPTIONEN]...n";
echo "Wandelt alle Dateinamen in Kleinbuchstaben um.nn";
echo " -h, --help zeigt diese Hilfemeldungn";
echo " --dir=VERZEICHIS zu bearbeitendes Verzeichnisn";
echo " -r wandelt auch Dateien in Unterordern umn";
exit;
}
/**
* @return void
* @param string $dir
* @param bool $r
* @desc Konvertierung beginnen
*/
function convFileNameToLower($dir, $r) {
global $numFiles, $numFilesSkipped;
processDir($dir, $r);
echo "nKonvertierungsprozess abgeschlossen!n";
echo ($numFiles == 1) ? "Es wurde 1 Datei umbenannt.n" : "Es wurden $numFiles Dateien umbenannt.n";
echo ($numFilesSkipped == 1) ? "Es wurde 1 Datei übersprungen.n" : "Es wurden $numFilesSkipped Dateien übersprungen.n";
}
/**
* @return void
* @param string $dir
* @param bool $r
* @desc Rekursive Funktion zum Dateiumbennen
*/
function processDir($dir, $r) {
global $numFiles, $numFilesSkipped;
$handle = opendir($dir);
while ($file = readdir ($handle)) {
if ($file != '.' && $file != '..') {
// prüfen, ob Verzeichnis
if (is_dir($file)) {
// wenn Rekursion, Funktion neu aufrufen
if ($r == true) {
processDir($dir.'/'.$file, $r);
}
// sonst Skip Meldung
else {
echo "$dir/$file: Verzeichnis (wird übersprungen)n";
}
}
else {
// Datei umbennen
$filenew = strtolower($file);
if ($file == $filenew) {
$numFilesSkipped++;
echo "$dir/$file => übersprungenn";
}
else {
$command = 'mv '.$dir.'/'.$file.' '.$dir.'/'.$filenew;
exec($command);
$numFiles++;
echo "$dir/$file => $dir/$filenewn";
}
}
}
}
closedir($handle);
}
// Vorbelegung
$recursive = false;
$dir = getcwd();
$numFiles = 0;
$numFilesSkipped = 0;
// Komandozeilenparameter
$short_opts = "hr";
$long_opts = array('dir=', 'help');
// Parameter verarbeiten
$con =& new Console_Getopt();
$opts =& $con->readPHPArgv();
$prog = array_shift($opts);
$options =& $con->getopt($opts, $short_opts, $long_opts);
foreach ($options[0] as $option) {
switch ($option[0]) {
case 'h':
case '--help':
usage($prog);
break;
case 'r':
$recursive = true;
break;
case '--dir':
$dir = $option[1];
break;
}
}
// Prüfen, ob das Verzeichnis existiert
if (!is_dir($dir)) {
echo "Fehler: $dir ist kein Verzeichnis!nn";
exit;
}
// Ausgabe starten
echo "Folgendes Verzeichnis wird verarbeitet: $dirn";
echo "Verzeichnis rekursiv verarbeiten: ";
echo ($recursive == true) ? "jan" : "neinnn";
echo "Beginnen? [J/n] ";
$input = str_replace("n", "", fgets(STDIN, 100));
if (($input == 'J') || ($input == 'j') || ($input == '')) {
convFileNameToLower($dir, $recursive);
}
else {
echo "Der Konvertierungsprozess wurde abgebrochen!nn";
}
?>
