В чем причина неправильного копирования папки с помощью bash-скрипта на macOS?

У меня есть bash-скрипт для копирования одной директории в другую: <br/> <br/> <pre><code class="bash">flagsDir="./src/shared/svg"
buildedDir="C:/Users/name/Desktop/OSPanel/domains/directory"

cp -r $flagsDir/ $buildedDir/</code></pre> <br/> <br/> На Windows скрипт работает корректно: папка flagsDir копируется в папку buildedDir. <br/> <br/> Однако на macOS вместо копирования папки flagsDir в buildedDir, в последнюю копируется лишь содержимое папки flagsDir. <br/> <br/> Какова причина этого поведения? <br/> <br/> На macOS переменная buildedDir указана как /Users/ivan/Desktop/directory.
  • 14 февраля 2025 г. 15:14
Ответы на вопрос 2
Причина, по которой ваш скрипт копирует только содержимое папки `flagsDir`, а не саму папку, заключается в использовании синтаксиса команды `cp` в bash.

Когда вы выполняете команду `cp -r $flagsDir/ $buildedDir/`, обратите внимание на слэш (`/`) в конце переменной `flagsDir`. Этот слэш указывает на то, что копируются только содержимое папки `flagsDir`, а не сама папка. Это поведение одинаково для macOS и Linux, но может отличаться на Windows, что, по всей видимости, и является причиной наблюдаемого вами поведения.

Чтобы скопировать саму папку `flagsDir` в `buildedDir`, вам нужно убрать слэш в конце:

```bash
cp -r $flagsDir $buildedDir
```

Таким образом, результат будет таким, что сама папка `flagsDir` будет создана в `buildedDir`, а ее содержимое будет скопировано внутрь новой папки.

Пример исправленного скрипта:

```bash
flagsDir="./src/shared/svg"
buildedDir="/Users/ivan/Desktop/directory"

cp -r $flagsDir $buildedDir
```

Теперь при выполнении этого скрипта в macOS, папка `svg` будет скопирована в `directory`, и результат будет соответствовать вашим ожиданиям.
Флаг рекурсивного копирования: -R 

вместо builded — built
Похожие вопросы