En esta breve guía, discutiremos cómo copiar un archivo a múltiples directorios desde la línea de comando usando find
, cp
, echo
, xargs
y tee
comandos en Linux.
El otro día quería copiar algunos videos a diferentes carpetas en mi escritorio Arch Linux. Como ya sabes, podemos hacerlo fácilmente haciendo clic derecho en el archivo, seleccionando Copy
del menú contextual y péguelo en el directorio/carpeta de destino.
Sin embargo, me gustaría saber si hay alguna otra forma de copiar el archivo en varios directorios de una sola vez. . Pensé que sería útil cuando quiero copiar un solo archivo en varios directorios diferentes a la vez. Hice algunas búsquedas en la web y encontré las siguientes soluciones.
Advertencia importante:
Tenga en cuenta que los siguientes comandos no solicitarán ninguna confirmación. Si existe algún archivo con el mismo nombre en el directorio de destino, se reemplazará automáticamente.
Si es nuevo en Linux, le sugiero que pruebe los comandos en cualquier máquina de prueba antes de comenzar a usarlos en la producción. De esta manera puede evitar la pérdida innecesaria de datos.
Copiar un archivo a varios directorios desde la línea de comandos en Linux
Tengo un archivo de texto llamado ostechnix.txt
en mi directorio de inicio, y quería copiarlo en dos directorios diferentes llamados Downloads
y Documents
de una vez.
Primero, veamos cómo copiar el archivo a múltiples directorios diferentes usando find
y cp
comandos.
Método 1:usar los comandos find y cp
Podemos copiar un solo archivo a varios directorios a la vez usando find
y cp
comandos
El find
es un comando de Unix y Linux para buscar archivos en una jerarquía de directorios y el comando cp se usa para copiar archivos y directorios.
Para copiar un archivo llamado ostechnix.txt
a ~/Downloads
y ~/Documents
directorios usando find
y cp
comando, ejecutar:
$ find ~/Downloads/ ~/Documents/ -maxdepth 0 -type d -exec cp ostechnix.txt {} \;
El comando anterior copiará el archivo ostechnix.txt en el directorio actual a ~/Downloads
y ~/Documents
directorios.
Si no especifica '-maxdepth 0'
opción, el ostechnix.txt
el archivo se copiará en ~/Downloads
, ~/Documents
directorios y también en sus subdirectorios también. Por lo tanto, no olvide especificarlo.
Como advertí anteriormente, si ya existe algún archivo con el mismo nombre (es decir, ostechnix.txt
) en cualquiera de los directorios de destino, el comando anterior simplemente sobrescribirá el archivo existente sin ninguna confirmación.
Si no desea sobrescribir el archivo existente, puede usar -n
marcar con cp
comando como a continuación:
$ find ~/Downloads/ ~/Documents/ -maxdepth 0 -type d -exec cp -n ostechnix.txt {} \;
Ahora, no reemplazará el archivo de destino si ya existe en las ubicaciones de destino.
Método 2:Uso de los comandos echo, xargs y cp
La otra forma de copiar archivos a varias ubicaciones es usando echo
, xargs
y cp
comandos.
Como ya sabes, el cp
El comando se usa para copiar los archivos y directorios, y xargs
El comando se usa para construir y ejecutar líneas de comando desde la entrada estándar.
Para copiar un archivo a múltiples directorios usando echo
, xargs
y cp
comandos, ejecute:
$ echo ~/Downloads ~/Documents | xargs -n 1 cp ostechnix.txt
Analicemos el comando anterior y veamos cómo funciona.
Generalmente, el echo
El comando imprime la cadena o el texto dado en la salida estándar. Pero en este caso, canalizamos la salida del echo
comando a xargs
. Aquí, echo
El comando enviará la ruta del directorio a xargs
como entrada.
xargs
El comando ejecuta el cp
comando dos veces y agrega la ruta de cada directorio al final del cp
dominio.
Los xargs
commands recibe dos argumentos (es decir, la ruta del directorio) de echo
dominio. El -n 1
opción en xargs
comando le dice a los xargs
para agregar solo uno de esos argumentos a la vez.
Nuevamente, el comando anterior reemplaza el archivo de destino si ya existe. Si no desea reemplazar el archivo de destino, agregue -n
bandera en el comando:
$ echo ~/Downloads ~/Documents | xargs -n 1 cp -n ostechnix.txt
Método 3:usar el comando tee
Tee
es una utilidad de Unix y Linux que se utiliza para leer desde la entrada estándar y escribir en la salida y los archivos estándar.
Ahora, copiemos el ostechnix.txt archivo en dos directorios diferentes llamados /home/sk/Downloads
y /home/sk/Documents
.
Para hacerlo, simplemente ejecute el siguiente comando desde la Terminal:
$ tee /home/sk/Downloads/ostechnix.txt /home/sk/Documents/ostechnix.txt < /home/sk/ostechnix.txt
El comando anterior copiará el ostechnix.txt
archivo del directorio de inicio a ~/Downloads
y ~/Documents
directorio.
Tenga en cuenta que tee
El comando también escribirá la entrada en la salida estándar. Si no quieres tee
comando para hacer esto, simplemente redirija la salida estándar a /dev/null
como se muestra a continuación.
$ tee /home/sk/Downloads/ostechnix.txt /home/sk/Documents/ostechnix.txt < /home/sk/ostechnix.txt >/dev/null
Nuevamente te advierto. Si ya existe algún archivo con el mismo nombre (es decir, ostechnix.txt
) en los destinos, el comando anterior sobrescribirá el archivo existente.
Para obtener más información, consulte las páginas de manual de los comandos anteriores:
$ man cp
$ man find
$ man xargs
$ man echo
$ man tee
Conclusión
Así es como copiamos un archivo a varios directorios a la vez desde la línea de comandos en Linux. Podría haber otras formas, pero creo que estos comandos son muy simples y fáciles de usar.
Nuevamente, asegúrese de que las rutas de destino sean correctas y, lo que es más importante, asegúrese de que no exista ningún archivo con el mismo nombre en la ubicación de destino.
Lectura relacionada:
- Cómo encontrar y copiar cierto tipo de archivos de un directorio a otro en Linux
- Copie tipos de archivos específicos manteniendo la estructura de directorios en Linux
- Copie archivos y cree directorios de destino al mismo tiempo
- Cómo copiar archivos y cambiar la propiedad y los permisos al mismo tiempo
- Cómo mantener intactos los permisos de propiedad y archivo al copiar archivos o directorios
- Reanudar archivos transferidos parcialmente a través de SSH mediante Rsync
- Cómo transferir rápidamente archivos grandes a través de la red en Linux y Unix
- Copia avanzada:agregar barra de progreso a los comandos cp y mv en Linux
- Copiar el contenido del archivo en el portapapeles sin mostrarlo