Veröffentlicht 27. Mai 200421 j Hi! Wer kennt einen Befehl der gleichzeitig kopiert und umbenennt? Die Problemstellung ist folgende: Alle Dateien auf einer CD sollen auf Platte kopiert werden und dabei gleichzeitig in großbuchstaben umgewandelt werden. Bsp.: cdrom/file1.tar --> /home/test/FILE1.TAR Aber jetzt kommt mir bitte keiner mit mv! Es sind mehrere tausend files! Die Variante erst mit "cp" zu kopieren und anschließend per schleife mit "tr" kenn ich. Es gibt aber noch eine andere!!! Ist zwar völlig unrelevant, aber das ganze soll auf nem SLES 8.1 - Server passieren. Gruß David
27. Mai 200421 j Aber jetzt kommt mir bitte keiner mit mv! Es sind mehrere tausend files! Die Variante erst mit "cp" zu kopieren und anschließend per schleife mit "tr" kenn ich. Es gibt aber noch eine andere!!! Ist zwar völlig unrelevant, aber das ganze soll auf nem SLES 8.1 - Server passieren. Gruß David Doch ich komme mit mv Selber basteln ist angesagt - Shellskript *grins* #! /bin/bash # # change all files from current dir on to uppercase # level() { local f for f in *; do if test -d $f; then pushd $f >&/dev/null level popd >&/dev/null fi g="$(echo $f | tr 'a-z' 'A-Z')" echo mv $f $g done } #set -x level exit 0 so die Ausgabe ist dann folgende (Ich hab das Skript UPPERCASE genannt, im Ordner /testordner gibt es z.B. die Dateien file1.tar und file2.tar): user@host:/testordner~> ./UPPERCASE mv file1.tar FILE1.TAR mv file2.tar FILE2.TAR so wenn du die mv-Kommandos nicht alle einzeln in die Maus packen (copy&paste) und ausführen willst, dann mach bei dem Skript einfach das "echo" vor mv $f $g weg. Nicht vergessen das Skript mit dem Kommando "chmod 755 <skriptname>" ausführbar zu machen. Also kopier das zeugs auf Platte in ein Verzeichnis Deiner Wahl und dann wechselst du in das Verzeichnis und sagst ./UPPERCASE und zack... :marine Kannst es ja mit 1-2 Testdateien ausprobieren.. Bei Problemen -> posten
27. Mai 200421 j Hi! Ich würd's mit nem PHP-Shell-Script machen, ungefähr so: #!/<Pfad zum PHP-Binary>/php $src = '/cdrom'; $dest = '/hier/solls/hin'; $d = dir($src); while (false !== ($entry = $d->read())) { if ($entry != '.' && $entry != '..') { echo "Kopiere ".$src."/".$entry." nach ".$dest."/".strtoupper($entry)."\n"; copy ($src.'/'.$entry, $dest.'/'.strtoupper($entry)); } } $d->close(); echo "Fertig!\n"; [/PHP] Gruß, Tobias
27. Mai 200421 j Erstmal vielen Dank für deine mühe! Werds mal ausprobieren! Soviel ich weiß, gibt es aber bei irgendeinem Befehl einen entsprechenden Parameter, der das alles auch macht. Also ein Befehl, ein Parameter und alles ist kopiert und umbenannt (klein -> groß) Gruß David
27. Mai 200421 j Hi! Hier ist die wohl einfachste Methode um Dateien von A nach B zu kopieren, und sie gleichzeitig in Grossbuchstaben umzubenennen. Klappt leider nur mit Dateinamen die max. 8.3 Zeichen haben. Aber wie der Zufall es will, sind auf der CD sowieso nur entsprechende Files. cd /mnt mkdir cdrom mount -r -t iso9660 -o map=off /dev/cdrom /mnt/cdrom cd /home/test cp -R /mnt/cdrom . Gruß David & BussiBär
27. Mai 200421 j Doch ich komme mit mv for f in *; do Escaped die Bash bei sowas auch Leerzeichen? g="$(echo $f | tr 'a-z' 'A-Z')" Du solltest besser tr '[:lower:]' '[:upper:]' verwenden ... (z.B. wegen Umlauten)
27. Mai 200421 j Escaped die Bash bei sowas auch Leerzeichen? Die Stelle ist nicht das Problem....eigentlich ja, doch dazu müssen die Werte der Variablen in Doppelhochkomma eingeschlossen werden... Verbesserter Code: #! /bin/bash # # change all files from current dir on to uppercase # level() { local f for f in *; do if test -d "$f"; then pushd "$f" >&/dev/null level popd >&/dev/null fi g="$(echo "$f" | tr '[:lower:]' '[:upper:]')" echo mv "$f" "$g" done } #set -x level exit 0
11. August 200421 j Also ich würd das mit "cp -r cdrom/file1.tar /home/test/FILE1.TAR" machen. Ist meiner Meinung nach immernoch die einfachste Variante.
13. August 200421 j kam zware schonmal aber egal... versuchs einfach mal mit: mv cdrom/file1.tar /home/test/FILE1.TAR das muesste funktionieren. c'ya CJ
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.