Situación 1
Como copio /home/src/somedir
a /dest/
de modo que el camino siempre termina como /dest/somedir
, independientemente de si /dest/somedir
¿ya existe?
Quiero evitar terminar con /dest/somedir/somedir
.
Situacion 2
¿Cómo copio todo dentro? /home/src/somedir
a /dest/
tal que /dest/somedir
no se crea y se ignora si ya existe?
¿Hay reglas sobre las barras diagonales que puedo usar? Pensé que terminar con una barra inclinada significaba siempre copiar solo el contenido, pero a menudo me sale mal.
cp -r /home/src/somedir /dest/
debe abordar ambas situaciones, ya sea creando o fusionándose en la carpeta existentecp
? Probablemente hay una opción correcta pararsync
que hare estoRespuestas:
cp
siempre copiará el (los) archivo (s) al inicio del comando al archivo o directorio al final del comando. La barra diagonal no hace mucho a los argumentos, a menos que el argumento sea un enlace simbólico a un directorio. Luego, al tener la barra diagonal se tratará como un directorio, mientras que al omitir la barra se copiará el enlace.Suponiendo que desea copiar de forma recursiva cualquier subdirectorio en sus ejemplos, lo haría como:
y
El primero obtiene el directorio.
/home/src/somedir
y copiará ese argumento, el directorio mismo y todos sus contenidos, al último argumento,/dest
. Creará elsomedir
directorio en/dest
Si es necesario y úsalo si ya existe.El segundo añade
*
hasta el final del primer argumento, que el shell expandirá para ser cada archivo que no comience con.
en/home/src/somedir
y copiará todos esos archivos y directorios a/dest
sin tener en cuenta lo que ya está allí (excepto algunas banderas paracp
le indicará que sobrescriba los archivos que tendrán lo mismo en el destino que un archivo existente).Como los comentarios a esta respuesta han señalado, hay problemas al usar
*
para agarrar todos los archivos en el directorio. Una alternativa sería utilizartar
hacer la copia por tiesto creará un archivo tar de
somedir
sin el camino principal mediante el uso de-C
para cambiar a ese directorio primero. Por defectotar
imprimirá astdout
que luego se canalizará a otrotar
Para extraerlo cambiando a la deseada./dest
directorio primero Esto también preservará muchos atributos de archivo, quecp
puede hacer lo mismofuente
*
la expansión de comodines fallará si hay demasiadas coincidencias. No sé el número exacto, pero la última vez que falló, el directorio contenía alrededor de 100000 archivos / directorios.*
cp
pero debe cumplir la tareacp -rv /home/src/somedir /dest
Estamos copiando «somedir» a «/ dest», por lo que terminamos con «/ dest / somedir»
cp -rv /home/src/somedir/* /dest
Estamos copiando «todos los archivos en somedir» (
somedir/*
) a «/ dest»Advertencia: somedir / * no incluye archivos ocultos (aquellos que comienzan con un punto).
Las barras finales no afectan el proceso. Puedes estar confundido
cp
conrsync
, donde una barra al final significa "copiar el contenido, no la carpeta".fuente