Alex: Shellscript: Verzeichnisstruktur kopieren

Schönen guten Tag,

ich möchte Dateien und Verzeichnisse aus dem Verzeichnis $SRC_DIR in das Verzeichnis $DEST_DIR kopieren. Dabei sollen versteckte Verzeichnisse (also die, die mit "." beginnen) ausgelassen werden. Momentan mache ich das folgendermaßen:

  
#!/bin/bash  
  
...  
  
for FILENAME in `find $SRC_DIR -mindepth 1 -type d -wholename "*/.*" -prune -o -printf "%P\n"`  
do  
    if [ -d "$SRC_DIR/$FILENAME" ]  
    then  
        mkdir "$DEST_DIR/$FILENAME"  
    fi  
  
    cp "$SRC_DIR/$FILENAME" "$DEST_DIR/$FILENAME"  
done  

Allerdings kommt mir das sehr umständlich vor. Geht das auch kürzer, eleganter, schöner, schneller, ...?

Grüße

Alex

  1. Hallo,

    Schönen guten Tag,

    ich möchte Dateien und Verzeichnisse aus dem Verzeichnis $SRC_DIR in das Verzeichnis $DEST_DIR kopieren. Dabei sollen versteckte Verzeichnisse (also die, die mit "." beginnen) ausgelassen werden.

    geht nicht cp -R *.*? Oder nimmt er dann die mit dem . mit. Da gibts bei cp vielleicht noch eine Option, versteckte Dateien nicht zu kopieren?

    Gruß

    jobo

    1. Schönen guten Tag,

      ich möchte Dateien und Verzeichnisse aus dem Verzeichnis $SRC_DIR in das Verzeichnis $DEST_DIR kopieren. Dabei sollen versteckte Verzeichnisse (also die, die mit "." beginnen) ausgelassen werden.

      geht nicht cp -R *.*? Oder nimmt er dann die mit dem . mit.

      Ja, dabei werden die Einträge mit "." am Anfang ebenfalls kopiert.

      Da gibts bei cp vielleicht noch eine Option, versteckte Dateien nicht zu kopieren?

      Ich hab zumindest keine gefunden. Außerdem möchte ich ja auch nur die versteckten _Verzeichnisse_ überspringen. Sowas wie ".htaccess" soll kopiert werden, wenn's eine Datei ist.

      Desweiteren möchte ich die Einträge aus $SRC_DIR schon am liebsten einzeln einsortieren, anstatt z.B. das ganze Verzeichnis zu kopieren und hinterher die ungewollten Einträge aus $DEST_DIR zu löschen. Falls $DEST_DIR schon Einträge enthält, sollen die nämlich erhalten bleiben.

      Grüße

      Alex

  2. Hoppla! Die Schleife sollte natürlich das hier machen:

      
    do  
        if [ -d "$SRC_DIR/$FILENAME" ]  
        then  
            mkdir "$DEST_DIR/$FILENAME"  
        else  
            cp "$SRC_DIR/$FILENAME" "$DEST_DIR/$FILENAME"  
        fi  
    done  
    
    

    Grüße

    Alex

  3. Tach,

    Allerdings kommt mir das sehr umständlich vor. Geht das auch kürzer, eleganter, schöner, schneller, ...?

    mit rsync (ungetestet), auch wenn das intern vermutlich wieder ähnlich aussehen wird:

    rsync --exclude='.*' $SRC_DIR $DEST_DIR

    mfg
    Woodfighter

    1. Schönen guten Tag,

      rsync --exclude='.*' $SRC_DIR $DEST_DIR

      das find ich ganz gut. Schön übersichtlich, auch wenn dafür rsync verfügbar sein muß. :-) Bleibt nur das Problem, daß hier sowohl versteckte Verzeichnisse als auch Dateien erfaßt werden. Um's, wie gewünscht, auf die Verzeichnisse zu beschränken, reichte ein zusätzlicher Slash am Ende des Exclude-Patterns.

      Vielen Dank!

      Alex