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:
cp -r /home/src/somedir /dest
y
cp -r /home/src/somedir/* /dest
El primero obtiene el directorio. /home/src/somedir
y copiará ese argumento, el directorio mismo y todos sus contenidos, al último argumento, /dest
. Creará el somedir
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 para cp
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 utilizar tar
hacer la copia por ti
tar -c -C /home/src/somedir . | tar -x -C /dest
esto creará un archivo tar de somedir
sin el camino principal mediante el uso de -C
para cambiar a ese directorio primero. Por defecto tar
imprimirá a stdout
que luego se canalizará a otro tar
Para extraerlo cambiando a la deseada. /dest
directorio primero Esto también preservará muchos atributos de archivo, que cp
puede hacer lo mismo
cp -r /home/src/somedir /dest/
debe abordar ambas situaciones, ya sea creando o fusionándose en la carpeta existente