Puede hacer esto usando la -Topción en cp. 
Consulte la página Man para cp.
-T, --no-target-directory
    treat DEST as a normal file
Entonces, según su ejemplo, la siguiente es la estructura del archivo.
$ tree test
test
|-- bar
|   |-- a
|   `-- b
`-- foo
    |-- a
    `-- b
2 directories, 4 files
Puede ver la clara diferencia cuando lo usa -vpara Verbose. 
Cuando usa solo -Roption.
$ cp -Rv foo/ bar/
`foo/' -> `bar/foo'
`foo/b' -> `bar/foo/b'
`foo/a' -> `bar/foo/a'
 $ tree
 |-- bar
 |   |-- a
 |   |-- b
 |   `-- foo
 |       |-- a
 |       `-- b
 `-- foo
     |-- a
     `-- b
3 directories, 6 files
Cuando usa la opción -T, sobrescribe el contenido, tratando el destino como un archivo normal y no como un directorio .
$ cp -TRv foo/ bar/
`foo/b' -> `bar/b'
`foo/a' -> `bar/a'
$ tree
|-- bar
|   |-- a
|   `-- b
`-- foo
    |-- a
    `-- b
2 directories, 4 files
Esto debería solucionar tu problema.
                 
                
                
                 
bar/) pero no en la fuente (foo/) se dejarán en su lugar, por lo que esto no es lo que la mayoría de la gente consideraría una sobrescritura completa del directorio. es decir. sibar/bazya existiera, seguiría existiendo después ...rm -rf bar/* && cp -TRv foo/ bar/Hágalo en dos pasos.
fuente
barcontenido sea idénticofoo, no una combinación de elementos defoomás otros elementos que ya existíanbar. La respuesta altamente votada de @Saurabh Meshram a continuación tiene este problema.rm -rf bar/; cp -r foo/ !$fooybarson directorios grandes ... tal vez hay archivosbarque no están yfooque no quieres eliminar. Esto no debería considerarse una respuesta realista en mi humilde opiniónSi desea asegurarse de que
bar/termine siendo idéntico afoo/, usersyncen su lugar:Si solo han cambiado algunas cosas, esto se ejecutará mucho más rápido que eliminar y volver a copiar todo el directorio.
-aes 'modo de archivo', que copia los archivos fielmente enfoo/abar/--deleteelimina archivos adicionales no enfoo/partirbar/, así, asegurarbar/termina idénticos-vhpara verboso y legible para humanosfoose requiere la barra inclinada posterior ; de lo contrario,rsyncse copiaráfoo/enbar/foo/lugar de sobrescribirbar/.foo/sobre el contenido debar/, use una barra en ambos. Es confuso porque no funcionará como se espera con una barra en ninguno , sin embargo; rsync siempre interpreta furtivamente la ruta de destino como si tuviera una barra, a pesar de que respeta la ausencia de una barra en el origen ruta. Por lo tanto, necesitamos una barra en la ruta de origen para que coincida con la barra que se agrega automáticamente en la ruta de destino, si queremos copiar el contenido defoo/enbar/, en lugar del directoriofoo/aterrizando enbar/comobar/foo.)rsynces muy poderoso y útil, si tiene curiosidad, busque qué más puede hacer (como copiar sobre ssh).fuente
cp -Topción porque también funciona en macosx 👍Utilice este
cpcomando:fuente
cpcomando eliminar el archivo de la fuente?El siguiente comando asegura que los archivos dotfiles (archivos ocultos) estén incluidos en la copia:
fuente
.significa todos los archivos en el directorio. Entonces, naturalmente, se incluirían los archivos ocultos.Muy similar a @Jonathan Wheeler:
Si no quiere recordar, pero no reescribir
bar:!$muestra el último argumento de su comando anterior.fuente
Esto debería solucionar tu problema.
fuente
La operación que definió es una "combinación" y no puede hacer eso con
cp. Sin embargo, si no está buscando fusionar y está bien perder la carpetabar, simplemente puederm -rf bareliminar la carpeta y luegomv foo barcambiarle el nombre. Esto no llevará ningún tiempo, ya que ambas operaciones se realizan mediante punteros de archivo, no con el contenido del archivo.fuente
Intente utilizar este comando compuesto por dos pasos:
fuente