Cómo copiar un archivo a varios directorios en Linux

en este artículo, discutiremos cómo copiar un archivo a varios directorios en Linux. xargs, find, tee, shell loop y paralelo son los comandos que pueden ayudarlo a copiar un archivo en varios directorios.

Supongamos que tenemos un archivo con el nombre «xyz.txt» y queremos copiarlo en 3 directorios con el nombre dir1, dir2 y dir3 que usamos los siguientes métodos:

Usando xargs

El comando xargs en el sistema operativo Unix/Linux convierte la entrada de entrada estándar en una lista de argumentos para un comando específico.

Sintaxis:

xargs -n 1 cp -v xyz.txt<<<"dir1 dir2 /home/kalilinux/dir3" 

                        OR

echo "dir1 dir2 /home/kalilinux/dir3" | xargs -n 1 cp -v xyz.txt

Producción:

En el segundo comando, el funcionamiento será el mismo que en el primero, pero las carpetas y el directorio de destino (dir1, dir2, dir3) se repiten primero y luego se alimentan como entrada al comando xargs.

Salida :

  • -n 1: está instruyendo a xargs para usar un argumento por línea de comando a la vez.
  • cp: Es un comando de copia básico.
  • -v: Mostrar mensajes informativos a medida que se realiza la copia.
  • xyz.txt: Es el nombre del archivo que queremos copiar.
  • dir1 dir2 son los nombres de las carpetas y /home/kalilinux/dir3 es el nombre del directorio con su ubicación adecuada y estas carpetas y directorios son los destinos donde copiar ese archivo.
  • Uso del operador de tubería | , la salida estándar de un comando se puede enviar a la entrada estándar de otro.

Nota: Si el archivo que se va a copiar ya existe en una de las carpetas de destino, el archivo anterior se reemplazará sin preguntar al usuario.

Es obligatorio especificar la ruta completa de los directorios; de lo contrario, recibirá el siguiente mensaje:

Debe estar en ese directorio donde están presentes las carpetas o archivos para copiar directamente a esa carpeta o archivo y no necesita especificar su ruta o ubicación completa. Si especifica la ubicación completa del archivo o la carpeta, sin importar dónde se encuentre, no obtendrá ningún error.

Ejemplo:

usando buscar

Aquí, el comando find inicia una búsqueda y permite realizar acciones en función de los resultados de la búsqueda.

Sintaxis:

encontrar dir1 dir2 /home/kalilinux/dir3 -max depth 0 -exec cp xyz.txt {} \;

Dónde,

  • dir1 dir2 son los nombres de las carpetas y /home/kalilinux/dir3 es el nombre del directorio con su ubicación adecuada donde queremos realizar la acción de copia.
  • -max depth : establece el número máximo de niveles (como aquí hemos establecido 0) que la búsqueda descenderá a un árbol de directorios al realizar pruebas y acciones.
  • -exec: Se utiliza para realizar acciones definidas por el usuario. Además de las acciones predefinidas, también podemos invocar comandos arbitrarios con la ayuda del comando -exec .
  • cp: Es el comando de copia básico.

Producción:

Usando el bucle de Shell

Aquí, estamos usando bash for loop para copiar el archivo xyz.txt en los directorios /home/kalilinux/dir2 /home/kalilinux/dir3 y también una carpeta dir1, directamente donde:

  • para: Ilustrando las carpetas y directorios.
  • dest: se utiliza para crear un flujo para escribir objetos de metadatos en el sistema de archivos.
  • dir1: Es la carpeta 
  •  /home/kalilinux/dir2 /home/kalilinux/dir3: Son los directorios que están separados por los espacios que damos entre ellos.
  • do: Está ejecutando el comando cp .
  • -v: Se utiliza para mostrar mensajes informativos a medida que se realiza la copia.
  • xyz.txt ‘: Es el nombre del archivo que queremos copiar en la carpeta y directorios.
  • done: se utiliza para finalizar el script de shell.

Sintaxis:

para destino en dir1 /home/kalilinux/dir2 /home/kalilinux/dir3 ; hacer cp -v xyz.txt “$destino” ; hecho

Producción:

 usando camiseta

El comando tee lee la entrada estándar y la copia tanto en las salidas estándar como en uno o más archivos.

Sintaxis:

tee /inicio/kalilinux/dir1/xyz.txt /inicio/kalilinux/dir2/xyz.txt /inicio/kalilinux/dir3/xyz.txt< xyz.txt

Si solo desea leer la entrada estándar y copiarla en uno o más archivos sin mostrar la salida estándar, puede usar >/dev/null al final del comando anterior. Por ejemplo:

tee /home/kalilinux/dir1/xyz.txt /home/kalilinux/dir2/xyz.txt /home/kalilinux/dir3/xyz.txt< xyz.txt >/dev/null

Producción:

Nota: es obligatorio dar cualquier nombre de archivo al final del destino después de dar la ubicación de los directorios. Puede ser diferente al nombre del archivo que copiamos en los directorios o puede ser el mismo que el nombre del archivo.

Usando GNU paralelo

Primero, debe instalar esto en su PC/computadora portátil porque es posible que no esté preinstalado en sus sistemas operativos Linux. Puedes instalarlo usando el comando:

sudo apt install parallel

entonces después de que usamos:

paralelo cp -v xyz.txt ::: /home/kalilinux/dir1 /home/kalilinux/dir2 dir3

GNU Parallel es una utilidad de shell para ejecutar trabajos en paralelo, lo que facilita la ejecución del comando contra conjuntos de datos al mismo tiempo. Aquí estamos usando:

  • paralelo: esta palabra clave utiliza GNU Parallel.
  • cp: para realizar la tarea de copia.
  • -v: para mostrar mensajes informativos a medida que se realiza la copia.

Producción:

Publicación traducida automáticamente

Artículo escrito por tusharndraj y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *