¿Cómo copiar archivos ocultos y subdirectorios ocultos (los que comienzan con un punto) en la carpeta A a la carpeta B? Por ejemplo si tengo esta estructura:
A/a
A/b
A/.a
A/.b/
A/.b/somefile
A/.b/.c
Me gustaría copiar a B solo los archivos ocultos y los subdirectorios ocultos en A:
B/.a
B/.b/
B/.b/somefile
B/.b/.c
Ya probé este comando: cp A/.* B
de esta otra pregunta de superusuario . Sin embargo, no copia los subdirectorios. También lo intenté cp -r A/.* B
, pero se copia, .
así que termino con una copia exacta de A (incluidos los archivos normales). Cualquier ayuda es apreciada.
fuente
..c
..*[^.]
pero luego te perderías los archivos que terminan en a.
. Creo que, de hecho, necesitaría un globbing extendido para realmente explicar todos los casos.El problema con
A/.*
es que existe el directorio.
en elA
que también coincide con el patrón.Puede activar patrones de glob extendido y usar lo siguiente:
Coincide con los archivos cuyo nombre comienza con un punto y cuyo segundo carácter no es ni un punto ni nada (? (.) No coincide con nada o un punto,! (...) lo niega, es decir! (? (.)) Coincide con todo lo demás que nada o un punto).
fuente
.!(@(|.))
es (AFAICT) equivalente al anterior, (IMNSHO) un poco más claro y solo un carácter más.Para casos como este recomendaría usar en
find
lugar decp
esto:La sintaxis básica se desglosa así:
find A/ -type f
:find
elementos en el directorioA/
cuyo tipo es un archivo (en lugar de un directorio) ...-maxdepth 1 -name '.*'
: Para esto para unmaxdepth
de 1 directorios y cuyoname
comienza con.
.-exec cp -p {} B/ \;
: Y una vez que se encuentran estos archivos,exec
elcp
comando con una-p
bandera para preservar fechas / horas desde el origen ({}
) hasta el destino deB/
.Me gusta usar
maxdepth
para agregar una capa de control, así que no estoy copiando accidentalmente un sistema de archivos completo. Pero siéntase libre de eliminar eso.fuente
find A -type d
proporciona una lista recursiva dentro de A con solo directoriosgrep -E "\."
filtra los directorios con un punto (es decir, directorios ocultos)cp -r
copiar recursivamenteCreé la estructura de archivos y carpetas para A y ejecuté el comando en Git Bash (no estoy con un Linux en este momento) y funcionó.
fuente
A B
, y luego actuaría inesperadamente porque se expandiría acp -r A B/.dotfile B
. El consejo general es no analizarfind
ols
generar en absoluto. Si usafind
, también debe usar sus propias opciones para filtrar en lugar degrep
, y si canaliza lafind
salida en otro lugar, use-print0
o llame directamente al comando que desee. Ver elfind
manual .extglob
ser configurados).find
análisis entonces.Como alternativa, puede usar este otro comando si el segundo carácter es alfanumérico ( fuente ):
fuente
.@foo
o..c
.