varios todos subdirectorios renombrar otro mover los listar directorios directorio crear copiar comando archivos archivo linux bash shell command-line cp

linux - todos - ¿Cómo forzar a ''cp'' a sobrescribir el directorio en lugar de crear otro dentro?



renombrar archivo linux (5)

El siguiente comando garantiza que los archivos punto (archivos ocultos) estén incluidos en la copia:

$ cp -Rf foo/. bar

Intento escribir un script Bash que sobrescribirá un directorio existente. Entonces, tengo un directorio foo / y estoy intentando sobrescribir la barra / con ella. Pero cuando lo hago,

cp -Rf foo/ bar/

lo que ocurre es que se crea un nuevo directorio bar / foo /. No quiero eso. Hay dos archivos en foo / a y b. Hay archivos con los mismos nombres en la barra / también. Quiero que el foo / a y foo / b reemplacen bar / a y bar / b.


Hazlo en dos pasos.

rm -r bar/ cp -r foo/ bar/


Muy similar a @Jonathan Wheeler:

Si no quiere recordar, pero no reescribir la bar :

rm -r bar/ cp -r foo/ !$

!$ muestra el último argumento de su comando anterior.


Puedes hacer esto usando la opción -T en cp .
Ver página Man para cp .

-T, --no-target-directory treat DEST as a normal file

Entonces, según su ejemplo, a continuación se muestra la estructura del archivo.

$ tree test test |-- bar | |-- a | `-- b `-- foo |-- a `-- b 2 directories, 4 files

Puedes ver la clara diferencia cuando usas -v para Verbose.
Cuando usas solo la opción -R .

$ 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 los contenidos, 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.


Use este comando cp :

cp -Rf foo/* bar/