2 votos

Cp, barra diagonal final y copia al mismo frente a otro directorio

Para copiar un directorio a otro directorio, el primer directorio debe escribirse sin la barra inclinada al final:

# ejemplo 1
# este comando copiará dir1 a dir2
# (dir2 ya existe)
cp -Rip dir1 dir2/

De lo contrario, el comando copiará el contenido del directorio y no el directorio en sí:

# ejemplo 2
# este comando copiará el contenido de dir1 a dir2
# (dir2 ya existe)
cp -Rip dir1/ dir2/

Entiendo la diferencia entre dir1 y dir1/ aquí, y la diferencia en el comportamiento de estos dos comandos no me confunde.

Pero para copiar el directorio no a otro directorio sino al mismo directorio donde se encuentra actualmente, la barra inclinada al final no hará ninguna diferencia. ¿Por qué?

# ejemplo 3
# cualquiera de estos comandos hará una copia de dir1
# (dir1-copia no existe previamente)
cp -Rip dir1 dir1-copia/
cp -Rip dir1/ dir1-copia/

Y otra pregunta relacionada. ¿Por qué no hay diferencia entre cómo funcionan mv dir1/ dir2/ y mv dir1 dir2/? En otras palabras, ¿por qué, respecto a la barra inclinada al final del directorio fuente, mv sigue la lógica del tercer ejemplo de cp, y no la lógica de los ejemplos uno y dos?

2voto

David Anderson Puntos 2189

A continuación se encuentra información de man cp.


NOMBRE
     cp – copiar archivos

SINOPSIS
     cp [-R [-H | -L | -P]] [-fi | -n] [-alpsvXx] archivo_origen archivo_destino
     cp [-R [-H | -L | -P]] [-fi | -n] [-alpsvXx]
         archivo_origen ... directorio_destino

DESCRIPCIÓN
     En la primera forma de sinopsis, la utilidad cp copia el contenido del
     archivo_origen al archivo_destino. En la segunda forma de sinopsis, se copia el contenido
     de cada archivo_origen nombre al directorio_destino.
     Los nombres de los archivos en sí no se cambian. Si cp detecta un intento de copiar un archivo en sí mismo, la copia fallará.


La pregunta del OP se refiere a cuál de las dos formas dadas arriba está siendo utilizada. Esto depende de si el directorio destino existe. La segunda forma requiere que el directorio destino exista. Al ingresar los siguientes comandos de la pregunta del OP, se utiliza la segunda forma.

cp -Rip dir1 dir2/
cp -Rip dir1/ dir2/

Al ingresar los siguientes comandos de la pregunta del OP, se utiliza la primera forma.

cp -Rip dir1 dir1-copy/
cp -Rip dir1/ dir1-copy/

Con ambos comandos anteriores, los resultados son los mismos. El directorio dir1 se duplica, donde dir1-copy es el nombre del duplicado. El uso de / después de dir1 es redundante.

Se puede comprobar que se está utilizando la primera forma añadiendo un archivo existente a cualquiera de los comandos. Por ejemplo, supongamos que existe un archivo llamado hi.txt y se ingresa el siguiente comando. Dado que ahora hay dos archivos fuente, se debe utilizar la segunda forma.

cp -Rip dir1 hi.txt dir1-copy/

El resultado será el siguiente mensaje de error.

cp: dir1-copy is not a directory

Dado que ninguno de los comandos a continuación produce un mensaje de error, se debe haber utilizado la primera forma.

cp -Rip dir1 dir1-copy/
cp -Rip dir1/ dir1-copy/

En cuanto a la "pregunta estrechamente relacionada" del OP

La salida de man cp hace la siguiente distinción involucrando el uso del carácter / después de un nombre de directorio cuando se especifica la opción -R.


     -R    Si archivo_origen designa un directorio, cp copia el directorio y
          todo el subárbol conectado en ese punto. Si el archivo_origen termina
          en un /, se copian los contenidos del directorio en lugar del
          directorio en sí....


No se hacen tales distinciones en la salida de man mv. Con el comando mv, el / al final no tiene un significado especial.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X