alles aus einen ordner kopieren mit cp

  • hi,


    wie kopiert man alles mit "cp" aus den /tmp ordner?


    Hintergrund :


    ich teste gerade gen2vdr auf einer cf-karte und will /log und /tmp im Netzwerk speichern.


    Nur scheitert es wieder mal am englisch für die man pages. "-R" oder "-r" kopiert auch nicht alles.


    unter /tmp gibt es ordner die mit "." beginnen die und die einzelnen dateien werden nicht übernommen.


    alternativen zu cp nehme ich auch gerne ;)


    Gruss Lexi

  • Zitat

    Original von lexi
    .....ich teste gerade gen2vdr auf einer cf-karte und will /log und /tmp im Netzwerk speichern ...


    Dafür ist cp sicherlich nicht die beste Wahl.
    Warum machst Du nicht enfach einen NFS Mount?

  • Zitat

    Original von fitzefatze
    Wenn Dateien, die mit einem Punkt "." beginnen kopiert werden sollen, musst du "*.*" als Maske angeben, um alle Dateien zu kopoeren, z.B. "cp -R /tmp/*.* /cf/tmp"


    So einfach ist das leider nicht, zumindest verhält sich bash bei mir diesbezüglich anders. (Die Shell expandiert "*", nicht cp!) Es gibt eine Reihe von internen Shell-Optionen, die die Expansion von "*" steuern:

    Code
    server:~# shopt|grep glob
    dotglob         off
    extglob         on
    failglob        off
    nocaseglob      off
    nullglob        off


    Damit findet "*.*" nur Dateien, die einen Punkt mit Zeichen davor und dahinter enthalten, also z.B. "test.ext", aber nicht ".test" oder "test". Auch ".*" hilft nicht weiter, das findet zwar ".test", aber weder "test.ext" noch "test", dafür aber ".", das übergeordnete Verzeichnis, was bei cp -R ziemlich unerwünscht sein dürfte.


    Um Dateien mit Punkt am Anfang gemeinsam mit allen anderen Dateien mit "*" zu finden, muss man vorher dotglob einschalten:


    Code
    shopt -s dotglob


    Am besten lässt man die Wildcards weg und gibt nur den Namen des zu kopierenden Verzeichnis an:


    Code
    cp -a /tmp/ /ziel/


    Oder, um das aktuelle Verzeichnis zu kopieren:


    Code
    cp -a . /ziel/
  • hi,


    mit cp -rfdp ist das resultat das selbe und bei cp -R /tmp/*.* /cf/tmp" wird gemeckert das es kein ordner ist. (ist natürlich an persönliche struktur angepasst wurden)


    Zitat

    Dafür ist cp sicherlich nicht die beste Wahl.
    Warum machst Du nicht enfach einen NFS Mount?


    per nfs mount soll es ja dann auch laufen, deshalb will ich ja kopieren und anschliesend mounten/verlinken, nur das starten von gen2vdr ohne /log und /tmp ist sehr gewöhnungsbedürftig ;)


    Gruss Lexi

  • Zitat

    Original von lexi
    .....per nfs mount soll es ja dann auch laufen, deshalb will ich ja kopieren und anschliesend mounten/verlinken, nur das starten von gen2vdr ohne /log und /tmp ist sehr gewöhnungsbedürftig ;)


    Gruss Lexi


    ??????


    Nur mal so am Rande gefragt.
    Du weist schon was ein NFS Mount ist, oder?

  • Zitat

    mit cp -rfdp ist das resultat das selbe und bei cp -R /tmp/*.* /cf/tmp" wird gemeckert das es kein ordner ist. (ist natürlich an persönliche struktur angepasst wurden)


    Das Problem sind vermutlich nicht die Schalter, sondern die Form, in der Du Quelle und Ziel angibst. Alles mit "*" wird von der Shell expandiert, so das cp eine Liste von Quellen sieht, und deswegen erwartet, dass das Ziel ein bereits existierendes Verzeichnis ist. Wenn Du nur eine Quelle angibst (also auf "*" verzichtest!) und diese ein Verzeichnis ist, dann wird dessen Inhalt komplett kopiert und das Zielverzeichnis automatisch erzeugt.


  • herzlichen Dank an dich


    nachdem die shopt aktiviert ist klappt alles wie gewünscht mit cp -a /x/y/* /a/b


    Gruss Lexi

  • Zitat

    Original von C-3PO


    ??????


    Nur mal so am Rande gefragt.
    Du weist schon was ein NFS Mount ist, oder?


    anscheinend nicht, erkläre es mir doch mal ;)


    lexi

  • Zitat

    Original von lexi
    ......anscheinend nicht, erkläre es mir doch mal ;)


    Ich bin mir nicht sicher ob Du das Ernst meinst, aber egal....


    Grob gesagt ist NFS dazu da, dass man lokale Verzeichnisse ins Netzwerk auslagert, also genau dass was Du eingenlich willst.


    Infos dazu gibt es z.B. hier:


    http://de.gentoo-wiki.com/Netzwerk_Verzeichnisse_mounten


    http://de.wikipedia.org/wiki/Network_File_System


    http://gentoo-wiki.com/HOWTO_Share_Directories_via_NFS


    http://gentoo-wiki.com/NFS

  • Zitat

    Grob gesagt ist NFS dazu da, dass man lokale Verzeichnisse ins Netzwerk auslagert, also genau dass was Du eingenlich willst.


    anscheinend reden wir doch vom selben ;) wenn du mir jetzt noch erzählst wie man per nfs "auslagern" kann obwohl das Netzwerk und somit nfs noch nicht gestartet ist... ...warten ist hier keine alternative!...


    lexi

  • Zitat

    Original von C-3PO


    Wieso warten??


    Die Dateien werden solange lokal geschrieben, bis gemountet ist.


    hast du das schon mal gestestet? (mit ner orginalen g2v) oder reimst du dir gerade was zusammen?


  • hi,


    kannst du noch verraten wie man das dauerhaft speichern kann? die shopt -s ist spätestens nach den reboot wieder "weg"


    Danke und Gruss Lexi

  • Zitat

    Original von lexi
    ... oder reimst du dir gerade was zusammen?

    [Blockierte Grafik: http://img184.imageshack.us/img184/1748/iconirreug6.gif]


    Ich klinke mich mal hier aus, denn nur weil du nicht weist wie NFS funktioniert, brauche ich mir nichts "zusammenreimen"!!


    BTW: Ja, es funktioniert bei mir, und das schon seit Jahren.


    LESEN und verstehen:


    http://www.tu-chemnitz.de/docs…s1-nfs-client-config.html

  • Zitat

    Original von lexi
    kannst du noch verraten wie man das dauerhaft speichern kann? die shopt -s ist spätestens nach den reboot wieder "weg"


    Hmm, bei jedem Booten? D.h. Du musst nach jedem Booten den Inhalt von /tmp/ und /log/ erneut wegkopieren? Kannst Du nicht die Netzverzeichnisse nach /tmp/ und /log/ mounten, bevor überhaupt in diese Verzeichnisse geschrieben wird? Irgendwie kann ich auch noch nicht ganz folgen ...


    Wie auch immer - einfach so speichern kann man das nicht, aber es gibt Profil-Skripte, die die Shell zur Initialisierung abarbeitet, da kann man beliebige Befehle eintragen. Es gibt aber mehrere davon, und welches das richtige wäre, hängt davon ab, welche Shell verwendet wird und wie diese aufgerufen wird. Einfacher wäre es, den Aufruf von shopt und cp in ein Skript zu packen, oder direkt in einem Schritt aufzurufen ...


    Code
    shopt -s dotglob; cp ...


    ... oder wie oben erwähnt die Wildcards zu vermeiden, damit shopt gar nicht benötigt wird.


  • schade, dann werde ich das morgen mal versuchen es in ein script einzubauen.


    Gruss Lexi

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!