Estoy tratando de copiar todos los archivos en el directorio A al directorio B. Todos los archivos en el directorio A comienzan con punto, por ejemplo:
A/.a
A/.b
A/.c
que encontré si uso: cp A/* B
siempre obtengo error:
cp: cannot stat 'A/*': no such file or directory
Parece que no hay opción de cp
que ls
para manejar las entradas iniciadas con el punto, alguien tiene idea de cómo solucionarlo?
-r
. Sin-r
, simplemente se saltará los directorios.-R
debería funcionar bien. Si cree que está mal, explique por qué.Si bash, puede configurar
dotglob
antes de copiarO un lenguaje de programación
Si no quieres configurar dotglob, solo
fuente
A
están ocultos. Él solo quiere copiar eso.Lo que estás buscando es más parecido a:
Esto coincidirá con todos los archivos de puntos, pero no con "." o "..". La mayoría de las soluciones anteriores están bien siempre que no trabaje de forma recursiva. Pero tan pronto como quieras hacer algo como:
Sin omitir "..", copiará todo desde el directorio principal hacia abajo, incluidos los archivos sin puntos.
fuente
.a
o.x
. El patrón de globbing más corto que he encontrado que coincide con todos los archivos de puntos, excepto.
y..
es.[^.]*
.Acabo de intentar lo siguiente y funciona solo encontrar ...
fuente
A/.
yA/..
como parámetros acp
, lo que podría ser problemático en el caso de OP también tiene que copiar los directorios (usandocp -r
)Eso no
cp
es culpa , es bash: bash se expande*
en todos los.
archivos no ocultos (es decir, no comienzan con ).Bash se expandirá
.*
(por lo tantoA/.*
, en su caso) con todos los archivos que comienzan.
, pero desafortunadamente también incluye.
y..
(directorios actuales y principales) que probablemente querrá omitir. (Tenga en cuenta que otros shells, como zsh, no los incluirían, y IIRC también golpean, después de configurar algunas opciones).Una solución fácil podría ser eliminar
.
y..
de archivos que coincidan.*
, de una manera (muy) hacky como esta:o este (probablemente más limpio: se usa
find
para encontrar los archivos para copiar):pero probablemente encontrarás soluciones más limpias.
fuente
for loop
luego crear ungrep
proceso adicional solo para hacer un trabajo comocp A/.*
?cp
ignorará el "." y directorios "..".Si todos comienzan con un punto, simplemente use
A/.*
:¡Espero que esto ayude!
fuente
Puedes usar este script
fuente
dupdo:
lista:
Listar archivos sin directorios descendentes:
fuente
Debe excluir y .. de la lista de archivos pasados a cp!
Esto es seguro:
fuente
Este es un hilo viejo ... pero siempre he podido copiar todos los archivos. Incluyendo archivos / carpetas que comienzan con '.'
Ejemplo copiará todos los archivos y carpetas:
cp -aup /root/.* / backup / root /
fuente