schnei Geschrieben 27. Mai 2004 Teilen Geschrieben 27. Mai 2004 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Schlaubi Geschrieben 27. Mai 2004 Teilen Geschrieben 27. Mai 2004 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
tobias-digital Geschrieben 27. Mai 2004 Teilen Geschrieben 27. Mai 2004 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
schnei Geschrieben 27. Mai 2004 Autor Teilen Geschrieben 27. Mai 2004 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
schnei Geschrieben 27. Mai 2004 Autor Teilen Geschrieben 27. Mai 2004 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Nachtgeist Geschrieben 27. Mai 2004 Teilen Geschrieben 27. Mai 2004 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) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Schlaubi Geschrieben 27. Mai 2004 Teilen Geschrieben 27. Mai 2004 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
The1 Geschrieben 11. August 2004 Teilen Geschrieben 11. August 2004 Also ich würd das mit "cp -r cdrom/file1.tar /home/test/FILE1.TAR" machen. Ist meiner Meinung nach immernoch die einfachste Variante. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
CJunky Geschrieben 13. August 2004 Teilen Geschrieben 13. August 2004 kam zware schonmal aber egal... versuchs einfach mal mit: mv cdrom/file1.tar /home/test/FILE1.TAR das muesste funktionieren. c'ya CJ Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.