it-swarm-es.com

mv: el directorio no está vacío

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.

151
UdK

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.

185
zwets

Rápido y sucio, si sabes lo que estás haciendo:

cp -r ./backup/* ./backupArchives && rm -R ./backup/*
37
patrickvacek

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/
4

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.

4

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.

1
navigaid