Unix: So führen Sie zwei Verzeichnisse zusammen

17

Angenommen, ich habe zwei Ordner mit unterschiedlichen Inhalten foound bar. Wie kann ich fusionieren barzu , fooso dass:

  • Dateien foo, die sich nicht in diesem barOrdner befinden, bleiben unberührt.
  • Dateien bar, die sich nicht in foobefinden , befinden sich jetzt in foo.
  • Dateien foo, die sich auch in barbefinden, wurden durch die Dateien von ersetzt bar.
Svish
quelle

Antworten:

25

Wenn ich Ihre Anforderungen richtig lese, gibt es keine Dateien, die von foonach gehen bar. Es sieht so aus, als könnten Sie einfach den Inhalt von barto kopieren und fooDateien nach Bedarf überschreiben (Standardverhalten).

$ cp -R /path/to/bar/* /path/to/foo
Kegeltöter
quelle
Ja, was mich unsicher machte, war die Rekursivität und wie man nicht dazu kommt, einfach nur Bar in Foo als Foo / Bar zu haben. Aber das scheint genau das zu sein, was ich will :)
Svish
1
Richtig, wenn Sie es einfach tun cp -R /path/to/bar /path/to/foowürden, würde es ein Verzeichnis bardarin erstellen foo. Subtiler Punkt.
Coneslayer
1
Hinweis: Versteckte Dateien / Verzeichnisse in bar(dh Namen, die mit einem Punkt beginnen - .) werden aufgrund der Funktionsweise des Shell-Globbing nicht angezeigt.
Kamil Maciorowski
9

Ich hatte ein sehr ähnliches Bedürfnis: Zusammenführen barin, fooaber Dateien, die sich in befinden, bar sollten keine übereinstimmenden Dateien in überschreiben foo. In diesem Fall:

$ cp -R -n /path/to/bar/* /path/to/foo/
Joel Aufrecht
quelle
1

Versuche dies :

$ cp -r-u-v /path/to/foo/* /path/to/bar/

Von man cp
-u, --update nur kopieren, wenn die SOURCE-Datei neuer als die Zieldatei ist oder wenn die
Zieldatei fehlt. -R, -r, --rekursive Verzeichnisse rekursiv kopieren

drew7721
quelle
1
Zwei Personen haben den Befehl cp bereits vorgeschlagen, sodass Ihre Antwort überflüssig erscheint. Nehmen Sie sich ein paar Minuten Zeit, um zu erklären, wie die von Ihnen ausgewählten Argumente besser funktionieren als die anderen Vorschläge, um Ihre Antwort hilfreicher zu machen.
music2myear
1
Das Flag -u wird nur aktualisiert, wenn die Datei in der Quelle neuer ist als die im Ziel. Siehe: man cp -> -u, --update: Nur kopieren, wenn die SOURCE-Datei neuer ist als die
Zieldatei
Fügen Sie diese Informationen zur Frage hinzu (verwenden Sie Bearbeiten direkt unter Ihrem Beitrag), damit die Leute diese hilfreichen Informationen in der Antwort selbst sehen können.
music2myear