ubuntuusers.de

Nur spezielle Files kopieren

Status: Gelöst | Ubuntu-Version: Ubuntu 12.04 (Precise Pangolin)
Antworten |

sappy

Anmeldungsdatum:
24. Januar 2012

Beiträge: 282

Hallo,

ich habe eine Verzeichnis-Struktur, z.b.:

/dir/0  
/dir/3  
/dir/file.txt

die Unterordner 0 und 3 enthalten eine weitere rekursive Dateistruktur mit weiteren Ordnern und Files.

Weiterhin habe ich eine zweite Verzeichnis-Struktur

/dir2/0

auch hier enthält der Ordner "0" wieder weitere Ordner und Files.

Ziel ist es, die erste Verzeichnis-Struktur mit der zweiten zu updaten. Es sollen dabei eigentlich nur die Ordner und Files in die 1. Struktur kopiert werden, die es noch nicht gibt. Ich habe es mit dem cp-Befehl und dem Update-Attribut versucht:

1
cp -R -u -p /dir2 /dir

Klappt nicht. Er legt mir dann den dir2-Ordner in /dir an.

Mit

1
rsync -an /dir2 /dir 

würde er nichts machen (-n für "Probier"-Modus)

Kann wer helfen?

LG sappy

Vain

Avatar von Vain

Anmeldungsdatum:
12. April 2008

Beiträge: 2510

sappy schrieb:

Mit

1
rsync -an /dir2 /dir 

würde er nichts machen (-n für "Probier"-Modus)

Gemein: Du siehst es nicht, weil „--progress“ nicht angegeben wurde.

Hab’s mal nachgestellt:

$ tree
.
├── dir
│   ├── 0
│   │   └── some
│   │       └── sub
│   │           └── dirs
│   ├── 3
│   └── file.txt
└── dir2
    └── 0
        └── other
            └── sub
                └── dirs
                    └── a_file

11 directories, 2 files
$ rsync -aXAP -n dir2/ dir
sending incremental file list
./
0/
0/other/
0/other/sub/
0/other/sub/dirs/
0/other/sub/dirs/a_file

(Ich verwende zusätzlich zu „-a“ in der Regel auch „-X“ und „-A“, um möglichst alle Dateiattribute zu erwischen.)

Wichtig ist bei rsync übrigens in diesem Fall der Slash hinter dem Quellverzeichnis. Der bewirkt, dass rsync den Inhalt von „dir2“ in „dir“ reinlegt. Ohne diesen Slash würde „dir2“ als Unterverzeichnis von „dir“ erscheinen.

Hilft dir das?

sappy

(Themenstarter)

Anmeldungsdatum:
24. Januar 2012

Beiträge: 282

Ja, perfekt. Hat super geklappt.

Danke!

lg sappy

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13219

Nur der Vollständigkeit halber: das geht auch mit cp -u:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
$ find
.
./dir1
./dir1/foo
./dir2
./dir2/bar
$ cp -auv dir2/. dir1
'dir2/./bar' -> 'dir1/./bar'
$ find
.
./dir1
./dir1/foo
./dir1/bar
./dir2
./dir2/bar
$ cp -auv dir2/. dir1
$
Antworten |