Te imploro, paso de desarrollo del forro liso en la cp
lí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 find
lugar (viene en el findutils
paquete, 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:
-H
hará que find
no 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 1
dejará find
de descender recursivamente a cualquier directorio cuyo nombre comience con un punto. No necesitamos que se repita, cp
lo haremos por nosotros, solo necesitamos los nombres a este nivel.
-name '.*'
dice find
que 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 l
Hay tres condiciones con una o entre ellas. -type d
coincide con directorios, -type f
coincide con archivos regulares y -type l
coincide 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 -o
derecho detrás de él, obviamente).
-exec ..... \;
le dice find
a 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 find
lí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.
-r
y-R
?