Укажите каталог при использовании команды cp

Укажите каталог при использовании команды cp

Есть ли способ скопировать определенные файлы из определенного каталога, если я в данный момент не нахожусь в этом каталоге?

Например, я пишу скрипт оболочки, который копирует файлы:

cp \
/some/long123/random/directory/somewhere13/composer.json \
/some/long123/random/directory/somewhere13/composer.lock \
/some/long123/random/directory/somewhere13/composer.phar \
/some/long123/random/directory/somewhere13/gulpfile.js \
/some/long123/random/directory/somewhere13/index.php \
/some/long123/random/directory/somewhere13/package-lock.json \
/var/www/api

Но мне кажется, что это выглядит совершенно нечитаемо, я хочу сделать что-то вроде:

cp \
/some/long123/random/directory/somewhere13/composer.json \
composer.lock \
composer.phar \
gulpfile.js \
package-lock.json \
/var/www/api

«/some/long123/random/directory/somewhere13» никогда не изменится.

Что-нибудь получше первого примера?

решение1

  • Вы можете использовать расширение скобок оболочки:

    cp /some/long123/random/directory/somewhere13/{composer.{json,lock,phar},gulpfile.js,index.php,package-lock.json} /var/www/api
    
  • Вы можете использовать переменные оболочки:

    src=/some/long123/random/directory/somewhere13
    
    cp $src/composer.{json,lock,phar} $src/gulpfile.js $src/index.php /var/www/api
    
  • Вы можете использовать массивы bash:

    paths=(
        $src/composer.{json,lock}
        $src/gulpfile.js
        $src/index.php
    )
    
    cp "${paths[@]}" /var/www/api
    
  • Вы можете объединить все вышеперечисленное.

  • Вы можете использовать совершенно другой процесс развертывания, который не подразумевает выборочного выбора каждого отдельного файла, например, git checkout.

решение2

(
  cd /some/long123/random/directory/somewhere13
  cp composer.json composer.lock composer.phar gulpfile.js index.php package-lock.json /var/www/api
)

Связанный контент