mv: Directorio no está vacío

124

Quiero mover el contenido de un directorio dentro de otro directorio con las mismas carpetas.

Aquí hay un ejemplo:

Tengo ./backup que tienen los directorios base y test . Ahora quiero mover estos directorios en ./backupArchives .

Uso esto:

mv ./backup/* ./backupArchives

pero obtuve 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 contenido, no hay sobrescritura.

    
pregunta UdK 19.03.2013 - 05:11

5 respuestas

159

Aunque su página man no la documenta, mv rechazará cambiar el nombre de un directorio a otro si el directorio de destino contiene archivos. Esto es algo bueno en su caso porque resulta que desea fusionar el contenido de la fuente en el destino, lo que mv no hará.

Use rsync -a backup/ backupArchives/ en su lugar. Después de eso, rm -rf backup/* .

En lugar de usar rsync , también puede hacer el clásico

(cd backup && tar c .) | (cd backupArchives && tar xf -)

que te gana más puntos geek.

    
respondido por el zwets 19.03.2013 - 08:51
24

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

cp -r ./backup/* ./backupArchives && rm -R ./backup/*
    
respondido por el patrickvacek 10.10.2013 - 18:07
3

Después del directorio en el que se mueve, necesita * (representa cualquier texto o número). Por ejemplo:

mv /var/www/* /recovery/wwwrecovery/

eso es todo, si mueve archivos, de lo que 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 para encontrar otro archivo. También recomiendo este paso porque el alquitrán lo comprime y lo reduce de tamaño.

Para extraer los archivos a otra carpeta, use

tar -xvzpf /var/www/

Si necesita copiar a 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 usar.

sudo tar -cvzpf backup.tar.gz /var/www/
    
respondido por el Dimitris Theodoridis 19.03.2013 - 05:27
3

Sure 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 por defecto).

¿Qué hay de usar:

cd /path/to/backup/ && cp -R --parents ./* ../backupArchives

A continuación, elimine el directorio backup si es necesario

Nota 1: necesita cd para el directorio backup antes de ejecutar cp -R --parents ...

Nota 2: compruebe dos veces el directorio backupArchives si obtuvo los nuevos archivos de la copia de seguridad.

    
respondido por el Atillo Regner Rex 03.03.2017 - 08:45
1

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 , ocurre el error mv: directory not empty .

Mi solución es abandonar 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 la copia y eliminación, lo que en efecto ahorra tiempo sin una sola línea de código.

PD: No probé todos los administradores de archivos. Pero la mayoría de ellos debería tener esta característica.

    
respondido por el navigaid 12.10.2016 - 11:22

Lea otras preguntas en las etiquetas