Ich habe folgende Verzeichnisstruktur.
dirA/[DateiA, irgendeinB, BalkenC, DateiD, irgendeinE, BalkenF] dirB/[DateiA, BalkenC, irgendeinE]
Ich möchte nur Dateien von Verzeichnis A nach Verzeichnis B kopieren, die bereits in Verzeichnis B vorhanden sind. Wie führe ich dieses selektive Kopieren durch?
Antwort1
Sie könnten beispielsweise den Befehl find mit der Option -exec verwenden. Sie würden wahrscheinlich eine Syntax wie die folgende verwenden (muss in dirB ausgeführt werden, und beachten Sie, dass es rekursiv ist):
find ./ -type f -exec cp '../dirA/{}' ./ \;
Das -type f weist find an, nur normale Dateien zu berücksichtigen, das -exec sagt: führe den folgenden Befehl für jede Datei aus. Das \; am Ende beendet den auszuführenden Befehl. Das {} ist ein Platzhalter, der von find durch den tatsächlichen Dateinamen ersetzt wird. Weitere Einzelheiten und weitere Anwendungsbeispiele finden Sie auf der Manpage von find.
Folgendes passiert auf meinem PC:
desktop:~$ mkdir dirA
desktop:~$ mkdir dirB
desktop:~$ cd dirA
desktop:~/dirA$ touch foo bar this
desktop:~/dirA$ cd ..
desktop:~$ cd dirB
desktop:~/dirB$ touch bar this
desktop:~/dirB$ find ./ -type f -exec cp -v '../dirA/{}' ./ \;
»../dirA/./this“ -> »./this“
»../dirA/./bar“ -> »./bar“