¿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/.* Bde 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 elAque 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
findlugar decpesto:La sintaxis básica se desglosa así:
find A/ -type f:findelementos en el directorioA/cuyo tipo es un archivo (en lugar de un directorio) ...-maxdepth 1 -name '.*': Para esto para unmaxdepthde 1 directorios y cuyonamecomienza con..-exec cp -p {} B/ \;: Y una vez que se encuentran estos archivos,execelcpcomando con una-pbandera para preservar fechas / horas desde el origen ({}) hasta el destino deB/.Me gusta usar
maxdepthpara 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 dproporciona una lista recursiva dentro de A con solo directoriosgrep -E "\."filtra los directorios con un punto (es decir, directorios ocultos)cp -rcopiar 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 analizarfindolsgenerar en absoluto. Si usafind, también debe usar sus propias opciones para filtrar en lugar degrep, y si canaliza lafindsalida en otro lugar, use-print0o llame directamente al comando que desee. Ver elfindmanual .extglobser configurados).findanálisis entonces.Como alternativa, puede usar este otro comando si el segundo carácter es alfanumérico ( fuente ):
fuente
.@fooo..c.