Especifique el directorio al usar el comando cp

Especifique el directorio al usar el comando cp

¿Hay alguna forma de copiar ciertos archivos de un directorio determinado cuando no estoy actualmente en ese directorio?

Por ejemplo, estoy escribiendo un script de shell que copia archivos:

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

Pero siento que esto parece bastante ilegible, quiero hacer algo más como:

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

El "/some/long123/random/directory/somewhere13" nunca cambiará.

¿Algo más interesante que el primer ejemplo?

Respuesta1

  • Puedes usar la expansión de llaves de shell:

    cp /some/long123/random/directory/somewhere13/{composer.{json,lock,phar},gulpfile.js,index.php,package-lock.json} /var/www/api
    
  • Puedes usar variables de shell:

    src=/some/long123/random/directory/somewhere13
    
    cp $src/composer.{json,lock,phar} $src/gulpfile.js $src/index.php /var/www/api
    
  • Puedes usar matrices bash:

    paths=(
        $src/composer.{json,lock}
        $src/gulpfile.js
        $src/index.php
    )
    
    cp "${paths[@]}" /var/www/api
    
  • Puedes combinar todo lo anterior.

  • Puede utilizar un proceso de implementación completamente diferente que no implique seleccionar un montón de archivos individuales cada vez, por ejemplo git checkout.

Respuesta2

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

información relacionada