Dateien umkopiere

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von tantor, 26.11.2007.

  1. tantor

    tantor Grünschnabel

    Dabei seit:
    26.11.2007
    Beiträge:
    6
    Zustimmungen:
    0
    Hallo zusammen,

    ich habe mal eine Frage wahrscheinlich in Bezug auf das SED-Kommando.

    Ich habe eine datei in der in jeder Zeile die Position einer Datei
    steht, also in etwa so :

    /u/v/test.txt
    /m/.../x/test1.txt


    nun möchte ich ich mittels SED Kommando, dass mir dieses Kommando die
    Zeilen jeweils so auseinandernimmt, dass ich zum einen den Pfad und
    zum anderen die Datei habe, denn die entsprechend hier angegebene
    Datei möchte ich in ein anderes Verzeichnis kopieren.

    Hoffe Sie verstehen was ich meine

    also die Datei : /u/v/test.txt soll nachher in /i/sed/ stehen ebenso
    die Datei aus /m/.../x/test1.txt

    Vielleicht kann mir jemand helfen ? Sollte etwas anderes einfacher
    oder sinnvoller als mit SED sein, dann bin ich froh über neue
    Ideen...

    Wäre super nett, danke.
     
  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 Ale-x, 26.11.2007
    Zuletzt bearbeitet: 26.11.2007
    Ale-x

    Ale-x bash lehrling

    Dabei seit:
    13.04.2007
    Beiträge:
    109
    Zustimmungen:
    0
    Ort:
    Osnabrück
    hmm? meinst du so?
    weiss nich genau was du willst
    auf jedenfall hast du mit dirname das verzeichnis und mit basename den dateinamen
    wenn du die nur umkopieren willst reicht in dem fall eigentlich cp $line neuerort


    Code:
    cat testdatei.txt
    /u/v/test.txt
    /m/.../x/test1.txt
    
    Code:
    cat testdatei.txt | while read line
    do
    cp $line neuerort
    
    done
    
    exit
    
     
  4. #3 Wolfgang, 26.11.2007
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Wenn ich dich richtig verstehe, stehen in dieser Datei nur
    /Pfade/dateiname

    Du möchtest diese Dateien kopieren?
    Dann brauchst du kein sed.
    Das geht mit der bash/ksh als Shell (Bitte immer die verwendete Shell angeben!) einfacher.

    Das hier ist sehr ausführlich, funktioniert auch mit Dateien mit häßlichen Leerzeichen.

    Code:
    $ while read file ;
    do #Wir testen ob es die Datei gibt! 
    if [ -e "$file" ];
     then 
    echo "Datei $file existiert";
    # hier verschieben wir
    # Das ist auskommentiert, bitte vorher testen.
    # Müssten eigentlich noch testen, ob das ziel schon existiert, um nicht zu 
    # überschreiben!
    # Verwende erstmal echo!
    echo "$file" "/new/path/$(basename "$file")";
    # mv "$file" "/new/path/$(basename "$file")";
    fi;
    done <test1
    # Das ist meine Testausgabe
    /tmp/test/file1 /new/path/file1
    /tmp/test/test/file2 mit Leerzeichen /new/path/file2 mit Leerzeichen
    
    man basename
    man dirname

    Alternativ dazu gibt es noch poormans basename
    Code:
    F=/tmp/test/Testfile
    # Pfad
    PFAD="${F%\/*}
    # Datei
    DAT="${F##*\/}"
    
    Gruß Wolfgang
     
  5. tantor

    tantor Grünschnabel

    Dabei seit:
    26.11.2007
    Beiträge:
    6
    Zustimmungen:
    0
    Hallo,

    @ Alex, klingt irgendwie einleuchtend
    @ Wolfgang, das mit dem Basement könnte interessant sein, aber wie kopiere ich denn dann damit

    Danke schonmal
     
  6. #5 Wolfgang, 26.11.2007
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Ersetze mein Echo mit cp.
    Ohne jeglichen Test
    Code:
    while read file;
    do
    cp "$file" "/new/path/"
    done <inputdatei
    
    Aber deine Frage bezog sich auch auf das Trennen von Pfad und Datei.
    Deshalb der Hinweis auf basename!

    Gruß Wolfgang
     
  7. #6 tantor, 27.11.2007
    Zuletzt bearbeitet: 27.11.2007
    tantor

    tantor Grünschnabel

    Dabei seit:
    26.11.2007
    Beiträge:
    6
    Zustimmungen:
    0
    Hallo zusammen,

    also ich bin mit meinem Problem jetzt wie folgt :
    Code:
       find . -name '*.zip'>temp.out 2>/dev/null
       awk ' ! /test/ && ! /Test/ { print $0 } ' temp.out >zip.out
       
       while read file
        do
         ln "$file" /listings/
        done <zip.out     
    
    Das macht auch soweit dass was ich will,
    allerdings habe ich ein Problem , wenn der Dateiname schon existiert.

    Jemand eine kreative Idee ?
    Bzw. jemand da, der mir das vielleicht in schön machen kann ?
    Denke dass ist arg umständlich oder ?

    Wäre super nett wenn ihr mir helfen könntet...
     
  8. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  9. Ale-x

    Ale-x bash lehrling

    Dabei seit:
    13.04.2007
    Beiträge:
    109
    Zustimmungen:
    0
    Ort:
    Osnabrück
    Code:
    #!/bin/bash
    
    find -name *.zip | awk ' ! /[Tt]est/ { print $0 } ' | while read line
    do
    
    base=$(basename $line)
    if test -e /listings/$base
     then
      echo "Datei $base existiert bereits"
    else
     cp $line copy
    fi
    done
    
    exit
    
     
  10. #8 lfhelper, 28.11.2007
    lfhelper

    lfhelper Jungspund

    Dabei seit:
    02.02.2007
    Beiträge:
    18
    Zustimmungen:
    0
    Mal ganz doof gefragt:

    Kann es sein, dass du hier fdupes (oder eines der anderen Programme zum auffinden und Auflösen, bzw. Hardlinken, von duplizierten Dateien) in Bash implementieren willst?

    Es gibt zwei Möglichkeiten:

    1. Du weisst nicht, dass es fdupes gibt.
    oder
    2. Du willst es einfach als Übung selbst implementieren.

    Was stimmt, bzw. was genau ist dein Hauptproblem?
     
Thema:

Dateien umkopiere

Die Seite wird geladen...

Dateien umkopiere - Ähnliche Themen

  1. Alle Dateien eines Verzeichnisses mit einer anderen Datei vergleichen

    Alle Dateien eines Verzeichnisses mit einer anderen Datei vergleichen: Hallo, ich habe ein Verzeichnis, darin enthalten sind mehrere Dateien. Nun möchte ich alle Dateien (Parameter $1) gegen eine konstante Datei...
  2. Dateien selektieren und zählen

    Dateien selektieren und zählen: Hallo, das ist mein erster Beitrag, bitte entschuldigt, falls nicht alles richtig geschrieben ist. Ich muss meine erste Hausaufgabe als...
  3. Benötige Hilfe- Dateien vergleichen

    Benötige Hilfe- Dateien vergleichen: Hallo, für eine Arbeit an der Uni muss ich einige viele Bilder miteinander vergleichen, was ich gerne durch eine Automatisierung etwas...
  4. Amarok streikt bei *.m4a Dateien

    Amarok streikt bei *.m4a Dateien: Hallo zusammen, vor Kurzem habe ich einen neuen Rechner zusammengebaut und mit OpenSuse 13.2 aufgesetzt. Nun musste ich aber feststellen, dass...
  5. Zertifikatsdateien

    Zertifikatsdateien: Hallöchen und einen schönen Abend! Ich habe zurzeit folgendes Problem. Ich habe eine SSL Wildcard für subdomain (als Beispiel *.example.com). Ich...