Verwenden Sie nicht cp. Verwenden Sie Rsync .
( Apple dev link .)
Hier ist der beste Weg, dies zu beschreiben:
dirA dir1 file1.txt file3.txt dirB dir1 file1.txt file2.txt
Ich möchte den Inhalt von dirB in dirA kopieren. cp -R dirB/* dirA
würde dir1
die Dateien löschen und kopieren, was Folgendes ergibt:
dirA dir1 file1.txt file2.txt
Aber ich möchte sie zusammenführen (wie unter Windows) und am Ende mit:
dirA dir1 file1.txt file2.txt file3.txt
Vorschläge? Ich habe es versucht ditto
, aber das scheint den rekursiven Teil zu ignorieren und alle Dateien im obersten Ordner abzulegen.
cp ist nicht das Löschen von Dateien.
Verwenden Sie -i
Option cp
-i Cause cp to write a prompt to the standard error output before copying a file that would overwrite an existing file. If the response from the standard input begins with the character `y' or `Y', the file copy is attempted. (The -i option overrides any previous -n option.)
Es muss einen eleganten Weg geben, aber als schnellen Hacken: Entfernen Sie die Schreibberechtigung aus den Dateien in dir1, und führen Sie dann ein cp -r aus.
Ich mache etwas Ähnliches mit einem Exportskript. Hier ist der Befehl, den ich verwende:
cp -R demo_files/. demo
Dadurch werden die Dateien in demo_files mit den Dateien in der Demo zusammengeführt. Es sollte nichts überschreiben.
dirA dir1 file1.txt file3.txt dirB dir1 file1.txt file2.txt
Ich würde es so machen:
$ cd dirA $ tar cf - | (cd .../dirB ; tar xf -)
Dateien werden überschrieben, Verzeichnisse nicht.
Die Erics-Lösung funktionierte, aber ich musste die Syntax ein wenig anpassen:
$ cd dirA $ tar -cf - ./* | (cd .../dirB ; tar -xf -)