He intentado copiar un archivo test.txten varios directorios con un comando:
cp ~/test.txt ~/folder1 ~/folder2
Pero no tuve éxito. ¿Hay alguna manera de hacerlo en un comando para poder copiar un archivo o incluso una carpeta en varios directorios?
command-line
cp
nux
fuente
fuente

for dest in folder1 folder2; do cp ~/test.txt ~/"$dest"; donecp ~/test.txt ~/folder1 && cp ~/test.txt ~/folder2Respuestas:
cppuede copiar desde múltiples fuentes, pero no puede copiar a múltiples destinos. Verman cppara más información.El único comando bash que sé que puede copiar / guardar en múltiples destinos es
tee.Puede usarlo en su caso de la siguiente manera:
Tenga en cuenta que
teetambién escribe la entrada en la salida estándar (stdout). Entonces, si no desea esto, puede evitarlo redirigiendo la salida estándar de la/dev/nullsiguiente manera:fuente
>/dev/nullobras también con archivos binarios, sin estropear el terminal ...-ropción concpen caso de directoriosteediferencia de lascpcopias, solo el contenido del archivo ignora su modo, propiedad y marcas de tiempo. Para evitar repetir el nombre del archivo:f=text.txt; <~/$f tee ~/folder1/$f > ~/folder2/$fOtra forma de lograr una copia en varias ubicaciones es el siguiente comando:
Si dir1 o dir2 tienen subdirectorios en los que no desea copiar el archivo, agregue la
-maxdepth 0opción:Tenga en cuenta que esto sobrescribirá todos los archivos en
dir1ydir2confile.txtel contenido, además de copiarlo. Para copiar solofile.txtsin afectar otros archivos en estos directorios, digafindque solo actúe en los directorios:fuente
findy dos veces (en este caso)cp. No quiere decir quefindnecesite mucho tiempo.El comando
intenta copiar dos archivos (
~/test.txty~/folder1) al destinofolder2. (Y si~/folder2existe y es un directorio, tendrá una advertencia de "omisión de directorio").Si desea hacer múltiples copias del archivo
test.txt, debe usar un bucle o múltiples comandos ...(... y tenga cuidado si tiene espacios incrustados en los nombres de archivo, necesitará comillas).
Para copiar directorios completos, debe usar la
-ropción:esto creará
~/folder1/folder3y~/folder2/folder3con todos los archivos incluidos.fuente
Puede crear un script de ayuda, o puede hacerlo con
xargsuna función de impresión (en este casoecho):Esto hará que cada directorio sea un argumento para la
cpfunción, utilizando el archivo de prueba como parámetro.fuente
¡Después de una larga búsqueda, esto también funciona como un encanto!
Esto copiará file.txt a cada directorio en su ubicación actual en la terminal.
Esto copiará una carpeta a cada subdirectorio en su ubicación actual en la terminal.
Lo comparto, espero que ayude a otros también.
fuente
zsh, puede usarfor i in *(/); ...para recorrer todos los subdirectorios, para evitar la[ -d ...prueba. El globbing extendido es una de las razones por las que me gustabash.zsh, el primer comando de esta respuesta se puede simplificar comofor dir in *(/); do cp /path/file.txt "$dir"; done. Ver zsh.sourceforge.net/Intro/intro_2.htmlfor dir in */;Si desea copiar el archivo test.txt en cada directorio en / tmp / target / ...
crear un entorno de prueba:
cópialo:
fuente
Solo pensé en dar una variación a la respuesta de
Sylvain Pineaudonde
dir1ydir2no están en su directorio actual.find ./ -maxdepth 2 -type d -name dir1 -exec cp file.txt {} \;aquí find buscará
dir1dos niveles de profundidad o puede omitir el-maxdepthparámetro para buscardir1en todas las carpetas en el directorio actual y debajo de él.fuente