Mac bash копирует все файлы из одного каталога в другой каталог

#bash #macos #sh

#bash #macos #sh

Вопрос:

У меня есть папка, которая содержит два каталога: build и copy-build .

Мне нужно, чтобы через bash копировались файлы, которые находятся внутри copy-build в build .

Если эти файлы уже существуют, он должен перезаписать их.

Я пытался с:

  cp -r ./SourceFolder ./DestFolder
  

Но SourceFolder папка скопирована в DestFolder , вместо этого мне нужны SourceFolder файлы, которые нужно скопировать в DestFolder .

Вы можете мне помочь?

Комментарии:

1. man ваш лучший друг в написании сценариев оболочки. Запустите man cp на своем терминале.

2. В конце концов, кажется, что я решил это.

3. Обычно я предпочитаю использовать rsync , а не cp -R .

Ответ №1:

Предполагая, что в SourceDir нет подкаталогов, вам следует попробовать

 cp ./SourceFolder/* ./DestFolder
  

Смотрите руководство для получения дополнительной информации.

Комментарии:

1. В итоге кажется, что я решил это, я сделал что-то вроде этого: cp -R ./copy-build/. ./Build

Ответ №2:

Используйте -R опцию вместо -r и явно включите / в имя исходного каталога.

 cp -R ./SourceFolder/ ./DestFolder
  

Из описания -R опции:

Если исходный файл заканчивается на / , копируется содержимое каталога, а не сам каталог.


Из раздела совместимости man cp :

В исторических версиях утилиты cp была опция -r. Эта реализация поддерживает эту опцию; однако ее использование настоятельно не рекомендуется, поскольку она некорректно копирует специальные файлы, символические ссылки или fifo.

Комментарии:

1. Я только что попробовал это, кажется, работает: cp -r ./copy-build /. ./build Можете ли вы сказать мне, какие изменения?

2. Поэтому желательно использовать -R вместо -r, верно? Так что, конечная точка после косой черты бесполезна? ./SourceFolder/.

3. Да, дополнительная косая черта — это то, что заставляет каждый файл из источника копироваться в пункт назначения, а не в сам исходный каталог.