Quiero mover el contenido de un directorio dentro de otro directorio con las mismas carpetas.
Aquí hay un ejemplo:
Tengo ./backup
que tiene los directorios base
y test
. Ahora quiero mover estos directorios en ./backupArchives
.
Yo uso esto:
mv ./backup/* ./backupArchives
pero recibí el error
mv: cannot move './backup/base' to './backupsArchive/base': Directory not empty
Intenté usar --force
, pero no tuve suerte. ¿Hay alguna forma de moverlo cuando las carpetas ya existen?
Nota: Solo quiero fusionar contenidos, no hay sobrescritura.
Aunque su página de manual no lo documenta, mv
se negará a cambiar el nombre de un directorio a otro directorio si el directorio de destino contiene archivos. Esto es algo bueno en su caso porque resulta que quiere fusionar el contenido de la fuente en el destino, lo que mv
no hará.
Utilice rsync -a backup/ backupArchives/
en su lugar. Después de eso rm -rf backup/*
.
En lugar de usar rsync
, también puedes hacer el clásico
(cd backup && tar c .) | (cd backupArchives && tar xf -)
que te da más puntos geek.
Rápido y sucio, si sabes lo que estás haciendo:
cp -r ./backup/* ./backupArchives && rm -R ./backup/*
Después del directorio que está moviendo, necesita *
(representa cualquier texto o número). Por ejemplo:
mv /var/www/* /recovery/wwwrecovery/
eso es todo, si mueve archivos, entonces se mueve como:
mv /var/www/index.php /recovery/index.php
Otra forma es empaquetar el contenido de esa carpeta usando tar:
tar -cvzpf backup.tar.gz /var/www
Luego muévelo a cualquier otro archivo. También recomiendo este paso porque el alquitrán lo comprime y lo hace más pequeño.
Para extraer los archivos a otra carpeta, use
tar -xvzpf /var/www/
Si necesita copiar en una ubicación que no le pertenece, asegúrese de anteponer su comando con el comando Sudo
después de la opción que decida utilizar.
Sudo tar -cvzpf backup.tar.gz /var/www/
Claro rsync
funciona, pero esto podría funcionar también para la máquina que no admite rsync
(es decir, en cpanel, que rsync no está instalado de forma predeterminada).
¿Qué pasa con el uso de:
cd /path/to/backup/ && cp -R --parents ./* ../backupArchives
Luego elimine el directorio backup
si es necesario
Nota 1: Necesita cd
en el directorio backup
antes de ejecutar el cp -R --parents ...
Nota 2: Verifique el directorio backupArchives
si obtuvo los archivos nuevos de la copia de seguridad.
Antes de hacer la pregunta, consideremos un caso simplificado.
Supongamos que en/home/admin tenemos dos carpetas foo
y bar
que tienen la misma estructura de subdirectorio, pero cada una contiene diferentes archivos. Ahora queremos fusionarlos en uno. Cuando hacemos cosas como mv foo/* bar
, se produce el error mv: directory not empty
.
Mi solución es renunciar a las herramientas de línea de comandos y cambiar a un administrador de archivos GUI, por ejemplo, dolphin. Cuando cambia el nombre de foo
a bar
en dolphin, le da la opción de escribir en la carpeta de destino y le pregunta si desea sobrescribir los archivos existentes de forma interactiva. Esto evita copiar y eliminar, lo que en efecto ahorra tiempo sin una sola línea de código.
PD: no probé todos los administradores de archivos que hay. Pero la mayoría de ellos debería tener esta característica.