Как я заставляю “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, но это, кажется, игнорирует рекурсивную часть и просто выводит все файлы в папке верхнего уровня.

3
задан 27.10.2009, 01:13

7 ответов

Не используйте CP. Используйте rsync.

(Apple dev ссылка.)

5
ответ дан 07.12.2019, 23:04

CP не удаляет файлы.

2
ответ дан 07.12.2019, 23:04

Использовать -i опция к 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.)
2
ответ дан 07.12.2019, 23:04

Существует, должен быть изящный путь, но как быстрый взлом: удалите разрешение записи из файлов в dir1, затем сделайте CP-r.

1
ответ дан 07.12.2019, 23:04

dirA dir1 file1.txt file3.txt dirB dir1 file1.txt file2.txt

Я сделал бы это этот путь:

$ cd dirA
$ tar cf - | (cd .../dirB ; tar xf -)

Файлы перезаписываются, каталоги не делают.

0
ответ дан 07.12.2019, 23:04

Я делаю что-то похожее со сценарием экспорта. Вот команда, которую я использую:

cp -R demo_files/. demo

Это объединит файлы в demo_files с файлами в демонстрации. Это ничего не должно перезаписывать.

0
ответ дан 07.12.2019, 23:04

Решение Erics работало, но я должен был настроить синтаксис немного:

$ cd dirA
$ tar -cf - ./* | (cd .../dirB ; tar -xf -)
0
ответ дан 07.12.2019, 23:04

Теги

Похожие вопросы