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