Как сделать так, чтобы "cp" в OS X не удалял файлы?
Вот лучший способ описать это:
dirA
dir1
file1.txt
file3.txt
dirB
dir1
file1.txt
file2.txt
Я хочу скопировать содержимое dirB в dirA. cp -R dirB/* dirA
удалил бы dir1
и скопировать файлы, в результате чего:
dirA
dir1
file1.txt
file2.txt
Но я хочу объединить их (как это было бы в Windows) и в итоге:
dirA
dir1
file1.txt
file2.txt
file3.txt
Предложения? я пробовал ditto
, но это, кажется, игнорирует рекурсивную часть и просто сбрасывает все файлы в папку верхнего уровня.
7 ответов
Не используйте cp. Используйте rsync.
Использование -i
option to 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.)
Должен быть элегантный способ, но для быстрого взлома: удалите разрешение на запись из файлов в dir1, затем выполните cp -r.
Я делаю нечто подобное со скриптом экспорта. Вот команда, которую я использую:
cp -R demo_files/. demo
Это объединит файлы в demo_files с файлами в демо. Это не должно ничего перезаписывать.
Решение Erics сработало, но мне пришлось немного подправить синтаксис:
$ cd dirA
$ tar -cf - ./* | (cd .../dirB ; tar -xf -)
dirA dir1 file1.txt file3.txt dirB dir1 file1.txt file2.txt
Я бы сделал это так:
$ cd dirA
$ tar cf - | (cd .../dirB ; tar xf -)
Файлы перезаписываются, а каталоги - нет.