Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Wer kennt einen Befehl der gleichzeitig...

Empfohlene Antworten

Veröffentlicht

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

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 ;)

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

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

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

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)

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

  • 2 Monate später...

Also ich würd das mit "cp -r cdrom/file1.tar /home/test/FILE1.TAR" machen.

Ist meiner Meinung nach immernoch die einfachste Variante.

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.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.