Te imploro, paso de desarrollo del forro liso en la cplínea de comandos - el desarrollo del forro tiene todo tipo de ejem . Casos de esquina "interesantes" (recursividad no deseados causados por y .., espacios, cosas no imprimible, enlaces duros, enlaces simbólicos, y etc.) Use en su findlugar (viene en el findutilspaquete, en caso de que no lo tenga instalado, lo que sería extraño, todas las distribuciones lo instalan por defecto):
find -H /path/to/toplevel/dir/ -maxdepth 1 -name '.*' -a \( -type d -o -type f -o -type l \) -exec cp -a '{}' /path/to/destination/dir/ \;
Explicación paso a paso:
-Hhará que findno siga los enlaces simbólicos (excepto si el nombre real del directorio de nivel superior que le dio es un enlace simbólico; eso seguirá).
/path/to/toplevel/dir/ obviamente, se supone que debe ser reemplazado por usted con la ruta del directorio que aloja los archivos de configuración y los directorios que desea respaldar.
-maxdepth 1dejará findde descender recursivamente a cualquier directorio cuyo nombre comience con un punto. No necesitamos que se repita, cplo haremos por nosotros, solo necesitamos los nombres a este nivel.
-name '.*'dice findque queremos todos los nombres que comienzan con un punto. Esto no funcionará correctamente si se establece la variable de entorno POSIXLY_CORRECT, pero rara vez (si es que lo está). Esta es la primera condición de coincidencia que hemos especificado hasta ahora.
a \( ....... \)es una y seguida de una condición más compleja entre paréntesis (he usado ..... para reemplazarlo, se explica a continuación). Necesitamos escapar de los paréntesis ya que de lo contrario el shell los interpretará (mal), de ahí la barra invertida frente a ellos,
-type d -o -type f -o -type lHay tres condiciones con una o entre ellas. -type dcoincide con directorios, -type fcoincide con archivos regulares y -type lcoincide con enlaces simbólicos. Puede seleccionar lo que desee, por ejemplo, si no desea hacer una copia de seguridad de los directorios de configuración, omita -type d(y el -oderecho detrás de él, obviamente).
-exec ..... \;le dice finda ejecutar un comando cada vez que se encuentra una coincidencia. El final del comando está marcado con un punto y coma, del que nuevamente debemos escapar con una barra diagonal inversa para evitar la interpretación de shell. Dentro de esa línea de comando, debe usar {}donde desea que termine el nombre de la coincidencia encontrada actualmente. Dado que las conchas también pueden malinterpretar las llaves, debe colocarlas en apóstrofes, como en '{}'. El comando que queremos ejecutar en este caso es cp -a '{}' /path/to/destination/dir/(-a significa archivo, que se repite en subdirectorios, copia enlaces simbólicos como enlaces y conserva los permisos y atributos extendidos, y /path/to/destination/dir/obviamente es el nombre del directorio de destino; reemplácelo).
Entonces, en inglés simple, esta findlínea de comando dice esto:
Comience en / path / to / toplevel / dir /. No descienda a ningún subdirectorio. Encuentra todos los directorios, archivos y enlaces simbólicos cuyo nombre comienza con un punto. Para cada uno de los que haya encontrado, cópielo en / path / to / destination / dir / preservando la naturaleza, los permisos y los atributos extendidos.
-ry-R?