Pregunta:
Estoy migrando mi directorio personal de un sistema antiguo a uno nuevo, y el tarball que hice contiene todo, incluidos archivos ocultos como .bashrc. Sin embargo, cuando muevo el contenido del tarball descomprimido (que está en / tmp) a mi nuevo directorio de inicio, los archivos ocultos no se copian ( mv /tmp/home/rcook/* /home/rcook/
). ¿Cómo puedo hacer que mv los mueva?
En realidad, creo que el problema no está en mv, sino en el globbing de bash. Si hago esto:
mkdir a
mkdir b
touch a/.foo
touch a/bar
mv a/* b/
ls -a a/ b/
Veo esto:
a/:
. .. .foo
b/:
. .. bar
a/.foo
no se movió. Entonces, ¿cómo puedo obtener el comodín * para encontrar archivos ocultos?
Sí, supongo que podría descomprimir el tarball directamente en mi directorio de inicio, pero el tarball se descomprime en home/rcook/...
, y quiero asegurarme de sobrescribir el nuevo .bashrc
, etc. con las versiones antiguas y personalizadas, y saber cómo encontrar y mover archivos ocultos es una habilidad que vale la pena. Sugerencias?
Algunas respuestas sugieren hacer algo como mv src/.* dest/
. Sin embargo, probé esto en mis directorios de prueba y obtuve errores. Empezando con:
rcook$ ls -a a/ b/
a/:
. .. bar .foo
b/:
. ..
rcook$ mv a/.* b/
mv: cannot move 'a/.' to 'b/.': Device or resource busy
mv: cannot remove 'a/..': Is a directory
rcook$ ls -a a/ b/
a/:
. .. bar
b/:
. .. .foo
¿Qué estoy haciendo mal?
Respuesta:
Puedes hacerlo :
shopt -s dotglob
mv /tmp/home/rcook/* /home/rcook/
Puedes poner
shopt -s dotglob
en tu ~/.bashrc
si quieres que sea el predeterminado.
Ver http://mywiki.wooledge.org/glob
Otro enfoque para copiar los archivos dot:
mv /tmp/home/rcook/.[!.]* /home/rcook/
No utilice el patrón ..*
ya que coincide ..
(puntero al directorio principal). Si hay archivos cuyo nombre comienza con dos puntos ( ..something
), utilice también el patrón ..?*
.