Dateien verschieben + Zeitstempel anhängen mit Hilfe einer for - Schleife

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von Akasabi, 28.02.2013.

  1. #1 Akasabi, 28.02.2013
    Akasabi

    Akasabi Grünschnabel

    Dabei seit:
    13.02.2013
    Beiträge:
    9
    Zustimmungen:
    0
    Guten morgen zusammen,

    könnt ihr mir bitte sagen warum meine for - Schleife nicht funktioniert?

    Code:
    timestamp=$( date +%d.%m.%y_%H:%M:%S )
    
    for file in 'ls -lrt *00.txt | awk '{print $9}''
    do
        echo $file
        mv $file /archive_aktuell/$file_$timestamp
    
    done
    Mit dieser for - Schleife möchte ich alle Dateien aus einem Verzeichniss, die die Endung *00.txt haben, in ein Archiv kopieren und dabei einen Zeitstempel anhängen.

    Ist die Struktur meines mv - Befehls falsch oder gibt es bei einer Schleife eine Besonderheit, die ich beachten muss?

    Über verschiedene Lösungsansätze würde ich mich freuen ;)

    Danke im Voraus!

    Gruß Akasabi
     
  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 tgruene, 28.02.2013
    tgruene

    tgruene Routinier

    Dabei seit:
    02.02.2012
    Beiträge:
    418
    Zustimmungen:
    0
    Die aeusseren Hochkommate sollten 'backticks' sein, d.h.
    Code:
     `...`
    oder (das ist sauberer)
    Code:
     $(...)
    . Die bash sieht
    Code:
    'ls -lrt *00.txt | awk '
    und
    Code:
    {print $9}''
    .
    Du kannst auch ohne awk auskommen:
    Code:
    for i in $( /bin/ls *00.txt ); do echo ${i}; done
     
  4. #3 Akasabi, 06.03.2013
    Akasabi

    Akasabi Grünschnabel

    Dabei seit:
    13.02.2013
    Beiträge:
    9
    Zustimmungen:
    0
    Danke für die Antwort und entschuldige meine späte Reaktion ;)

    Das sind Beispieldateien die ich mit meiner for - Schleife verschieben und gleichzeitig umbennen möchte (Zeitstempel anhängen)

    -rw------- 1 root root 0 Mar 6 08:59 testdatei_2425266200.txt
    -rw------- 1 root root 0 Mar 6 08:59 testdatei_2925266200.txt

    Und diese Fehlermeldung tritt bisher auf...wie ich mir schon gedacht habe ist mein mv - Befehl falsch aber ich komm einfach nicht darauf wie ich diesen verändern muss -.-

    testdatei_2425266200.txt
    mv: cannot rename testdatei_2425266200.txt to /archive_aktuell/06.03.13_08:59:40: No such file or directory
    testdatei_2925266200.txt
    mv: cannot rename testdatei_2925266200.txt to /archive_aktuell/06.03.13_08:59:40: No such file or directory


    Meine for - Schleife sieht nun so aus:

    Code:
    timestamp=$( date +%d.%m.%y_%H:%M:%S )
    
    for file in $(ls -lrt *00.txt | awk '{print $9}')
    do
        echo $file
        mv $file /archive_aktuell/$file_$timestamp
    
    done
    Kann mir jemand bitte sagen was mein Fehler ist? Ich mach da schon eine Weile rum aber komm einfach nicht dahinter^^
     
  5. #4 Spröde, 06.03.2013
    Spröde

    Spröde Alter Sack

    Dabei seit:
    22.01.2012
    Beiträge:
    173
    Zustimmungen:
    0
    Ich nehme an, dass der absolute Pfad /archive_aktuell/ nicht existiert.
    Code:
    ls /archive_aktuell/
     
  6. #5 Akasabi, 06.03.2013
    Akasabi

    Akasabi Grünschnabel

    Dabei seit:
    13.02.2013
    Beiträge:
    9
    Zustimmungen:
    0
    Oh ja...kleiner Flüchtigkeitsfehler :D

    Code:
    mv $file archive_aktuell/$file_$timestamp
    So sollte es natürlich heißen.

    Mein Problem ist nun, dass das Verschieben und Umbennen nur teilweise funtkioniert:

    /data/tmp/uebung/archive_aktuell

    -rw------- 1 root root 0 Mar 6 08:59 06.03.13_11:40:41

    Es wurde nur eine Datei verschoben und wie man sehen kann heißt diese Datei nur $timestamp anstatt von $file_$timestamp

    Kann mir das jemand erklären? Soweit ich weiß müsste meine for - Schleife laufen bis $(ls -lrt *00.txt | awk '{print $9}') keine Dateien mehr ausgibt (sprich alle Dateien auf die das zutrifft wurden verschoben) oder nicht?

    PS: Ich befinde mich im Verzeichniss /data/tmp/uebung wenn ich meine for - Schleife ausführe, also ein weiterer Verzeichniss - Fehler schließe ich aus!
     
  7. #6 Spröde, 06.03.2013
    Spröde

    Spröde Alter Sack

    Dabei seit:
    22.01.2012
    Beiträge:
    173
    Zustimmungen:
    0
    Scheinen Leerzeichen zu sein, die stören. Benutze mal konsequent Doublequotes:
    Code:
    mv "$file" "archive_aktuell/$file_$timestamp"
     
  8. #7 Spröde, 06.03.2013
    Spröde

    Spröde Alter Sack

    Dabei seit:
    22.01.2012
    Beiträge:
    173
    Zustimmungen:
    0
    Gar keine Probleme mit Sonderzeichen gibt es so:
    Code:
    timestamp=$( date +%d.%m.%y_%H:%M:%S )
    find -maxdepth 1 -type f -name "*00.txt" -exec mv {} archive_aktuell/{}_$timestamp \;
     
  9. #8 tgruene, 07.03.2013
    tgruene

    tgruene Routinier

    Dabei seit:
    02.02.2012
    Beiträge:
    418
    Zustimmungen:
    0
    Oder fehlende Klammern - der Dateiname enthaelt nur einen Unterstich, den vom timestamp, d.h., die bash interpretiert 'file_' als Variablenname. ${file}_${timestamp} sollte da weiterhelfen - oder eben Sproedes Vorschlag ueber 'find'.
     
  10. #9 Spröde, 07.03.2013
    Spröde

    Spröde Alter Sack

    Dabei seit:
    22.01.2012
    Beiträge:
    173
    Zustimmungen:
    0
    tgruene hat recht:
    Code:
    ~> t1=aaa
    ~> t2=bbb
    ~> echo $t1_$t2
    bbb
    
    Also klammern:
    Code:
    ~> echo ${t1}_$t2
    aaa_bbb
    
     
  11. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  12. #10 Akasabi, 08.03.2013
    Akasabi

    Akasabi Grünschnabel

    Dabei seit:
    13.02.2013
    Beiträge:
    9
    Zustimmungen:
    0
    So ich konnte ds Problem endlich dank eurer Hilfe lösen :)

    Der Vorschlag von tgruene hat funktioniert und die ausführliche Ekrlärung von Spröde war auch gut!

    Meine for - Schleife sieht nun wie folgt aus:

    Code:
    timestamp=$( date +%d.%m.%y_%H:%M:%S )
    
    for file in $(ls -lrt *00.txt | awk '{print $9}')
    do
        echo $file
        mv "$file" "archive_aktuell/${file}_${timestamp}"
    
    done

    Ich hatte leider keine Zeit den find - Befehl auszuprobieren aber das werde ich demnächst nachholen ;)

    Gruß Akasabi
     
  13. #11 Spröde, 08.03.2013
    Spröde

    Spröde Alter Sack

    Dabei seit:
    22.01.2012
    Beiträge:
    173
    Zustimmungen:
    0
    Find ist ein sehr mächtiges Werkzeug, das man unbedingt kennen sollte, wenn man viel mit/an Dateien arbeitet.
     
Thema: Dateien verschieben + Zeitstempel anhängen mit Hilfe einer for - Schleife
Besucher kamen mit folgenden Suchen
  1. mehrere Dateien in einer Schleife verschieben und umbenennen

Die Seite wird geladen...

Dateien verschieben + Zeitstempel anhängen mit Hilfe einer for - Schleife - Ähnliche Themen

  1. Dateien von Linux nach Win verschieben und doppelte Dateien automatisch umbenennen.

    Dateien von Linux nach Win verschieben und doppelte Dateien automatisch umbenennen.: Also unter Linux können Namen von Dateien Zeichen in gross oder Kleinschrift haben und werden dennoch als unterschiedliche Dateien erkannt. Unter...
  2. Dateien von Linux nach Win verschieben und konvertieren.

    Dateien von Linux nach Win verschieben und konvertieren.: Hallo, ich würde gerne Dateien vom ext3, nach NTFS, verschieben und dabei die Namen konvertieren, so wie die Inhalte von Textdateien. Am Besten...
  3. Dateien auf anderen Server verschieben

    Dateien auf anderen Server verschieben: Hallo Unixboard :) Ich hab eine frage und zwar, ich besitze 2 Server bei verschiedenen Anbietern. Ich würde gerne jede Stunde einen Ordner von...
  4. Debian - Dateien auf anderen Server verschieben

    Debian - Dateien auf anderen Server verschieben: Hi, ich habe mir gerade ein paar configs von Switchen gezogen. Diese sollen über die Kommandozeile auf einen anderen Server verschoben werden....
  5. BASH/AWK: Text aus mehreren Dateien in eine .txt verschieben

    BASH/AWK: Text aus mehreren Dateien in eine .txt verschieben: Hallo zusammen, habe eine neues Problem. Ich habe mehrere .txt Dateien die jeweils eine Zahl pro Zeile enthalten. Momentan sind es pro Datei 21...