En bash necesito hacer esto:
tomar todos los archivos en un directorio
copiarlos en un directorio existente
¿Cómo hago esto? Lo intenté cp -r t1 t2
(tanto t1 como t2 son directorios existentes, t1 tiene archivos) pero creó un directorio llamado t1 dentro de t2, no quiero eso, necesito que los archivos en t1 vayan directamente dentro de t2. ¿Cómo hago esto?
cp
preguntas pueden verse comobash
preguntas, que es un lenguaje de programación. Nunca he visto que se cerrara una pregunta de Python sobre la copia de archivos.Respuestas:
Lo que quieres es:
El punto al final le dice que copie el contenido del directorio actual, no el directorio en sí. Este método también incluye archivos y carpetas ocultos.
fuente
mv
. ¿Alguien sabe por qué?Si desea copiar algo de un directorio al directorio actual , haga lo siguiente:
Esto supone que no está intentando copiar archivos ocultos.
fuente
O si tiene directorios dentro de dir1 que también desea copiar
fuente
dir1/.*
no es una buena idea, ya que copia dir1 / .. (es decir, el padre del directorio que realmente está intentando copiar). También copia dir1 /. lo cual está bien, excepto que ya (en su mayoría) se ha copiado, por lo que está haciendo el trabajo dos veces.dir1/.*
solucionar el problema de los archivos / ocultos ingresando en el directorio desde el que desea copiar y luego refiriéndose a él como.
. Por lo tanto, si desea copiar todos los archivos, incluidos los archivos ocultos de un directorio a un directorio existente, puede:cd [source dir]
,cp . [path to destination dir, with no trailing slash]
.Suponiendo que t1 es la carpeta con archivos, y t2 es el directorio vacío. Lo que quieres es algo como esto:
Tenga en cuenta que, para el primer ejemplo, t1 y t2 tienen que ser las rutas completas o las rutas relativas (según dónde se encuentre). Si lo desea, puede navegar a la carpeta vacía (t2) y hacer esto:
O puede navegar a la carpeta con archivos (t1) y hacer esto:
Nota: El signo * (o comodín) representa todos los archivos y carpetas. La bandera -R significa recursivamente (todo dentro de todo).
fuente
La barra inclinada final en el directorio fuente cambia la semántica ligeramente, por lo que copia el contenido pero no el directorio en sí. También evita los problemas con archivos globales e invisibles que tiene la respuesta de Bertrand (copiar
t1/*
archivos invisibles perdidos, copiar copias 't1 / * t1 /.*' t1 /. Y t1 / ..., que no desea).fuente
$ mkdir t1
$ mkdir t2
$ touch t1/one
$ touch t1/two
$ touch t1/.three
$ cp -R t1/ t2
$ ls t2/
t1
(lo siento, no hay formato de código en los comentarios, versión legible en pastebin.com/yszSxV6G )Dependiendo de algunos detalles, es posible que deba hacer algo como esto:
... esto básicamente cambia al directorio SRC y lo copia en el destino, luego regresa a donde haya comenzado.
El alboroto adicional es manejar objetivos relativos o absolutos.
(Esto no se basa en la semántica sutil del
cp
comando en sí ... sobre cómo maneja las especificaciones de origen con o sin un seguimiento / ... ya que no estoy seguro de que sean estables, portátiles y confiables más allá de GNUcp
y yo no sé si seguirán siéndolo en el futuro).fuente
Para dentro de algún directorio, esto se usará completo ya que copia todo el contenido de "carpeta1" al nuevo directorio "carpeta2" dentro de algún directorio.
$ (pwd) obtendrá la ruta para el directorio actual.
Observe el punto (.) Después de la carpeta1 para obtener todos los contenidos dentro de la carpeta1
fuente