使用 cp 命令时指定目录

使用 cp 命令时指定目录

当我当前不在某个目录中时,有什么方法可以将某些文件从该目录中复制出来?

例如我正在编写一个复制文件的shell脚本:

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

  • 您可以使用 shell 括号扩展:

    cp /some/long123/random/directory/somewhere13/{composer.{json,lock,phar},gulpfile.js,index.php,package-lock.json} /var/www/api
    
  • 您可以使用 shell 变量:

    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
)

相关内容