He intentado copiar un archivo test.txt
en 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"; done
cp ~/test.txt ~/folder1 && cp ~/test.txt ~/folder2
Respuestas:
cp
puede copiar desde múltiples fuentes, pero no puede copiar a múltiples destinos. Verman cp
para 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
tee
tambié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/null
siguiente manera:fuente
>/dev/null
obras también con archivos binarios, sin estropear el terminal ...-r
opción concp
en caso de directoriostee
diferencia de lascp
copias, 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/$f
Otra 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 0
opción:Tenga en cuenta que esto sobrescribirá todos los archivos en
dir1
ydir2
confile.txt
el contenido, además de copiarlo. Para copiar solofile.txt
sin afectar otros archivos en estos directorios, digafind
que solo actúe en los directorios:fuente
find
y dos veces (en este caso)cp
. No quiere decir quefind
necesite mucho tiempo.El comando
intenta copiar dos archivos (
~/test.txt
y~/folder1
) al destinofolder2
. (Y si~/folder2
existe 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
-r
opción:esto creará
~/folder1/folder3
y~/folder2/folder3
con todos los archivos incluidos.fuente
Puede crear un script de ayuda, o puede hacerlo con
xargs
una función de impresión (en este casoecho
):Esto hará que cada directorio sea un argumento para la
cp
funció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 Pineau
donde
dir1
ydir2
no están en su directorio actual.find ./ -maxdepth 2 -type d -name dir1 -exec cp file.txt {} \;
aquí find buscará
dir1
dos niveles de profundidad o puede omitir el-maxdepth
parámetro para buscardir1
en todas las carpetas en el directorio actual y debajo de él.fuente