Cómo forzar la sobrescritura de directorios no vacíos usando `mv`


17

Quiero mover (no solo copiar) un grupo de archivos / directorios a un directorio diferente, algunos de los cuales tienen conflictos de nombres con archivos / directorios en el directorio de destino. Mi objetivo principal es mover los archivos, de modo que pueda tolerar que se sobrescriba el directorio no vacío.

Actualmente estoy usando mv ... destinationsin embargo, ocasionalmente me sale

mv: no se puede mover 'target' a / destination / target ': el directorio no está vacío

Lo intenté mv -f ... destinationsin éxito y, dado que quiero que los archivos desaparezcan de su ubicación original, rsyncno parece ser apropiado.

Como beneficio adicional, ¿hay una buena solución para preservar los archivos destinados a sobrescribirse de alguna manera, tal vez cambiando el nombre?


¿Y qué error obtienes cuando pruebas tu comando mv?
sospechoso

Dices explícitamente que eso rsyncno es lo que quieres; ¿Por qué etiquetaste esto rsync?
DopeGhoti

@DopeGhoti Dije que no parece apropiado, pero estoy dispuesto a que me muestren lo contrario.
user1227038

@suspectus Pregunta actualizada.
user1227038

1
si usa use mv --backup=numberedo una de las otras opciones para el --backupcambio, mvcompletará la fusión y conservará los archivos que se deben sobrescribir
bsd

Respuestas:


19

Si utiliza mv --backup=numbered
(o cualquiera de las otras opciones para el --backupinterruptor),
a continuación, mvse completa la fusión y preservar los archivos destinados a ser sobrescrito.


respuesta tonta: esto contaminará su unidad con .~1~carpetas
Toolkit

0
#!/bin/bash
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
SRC=/path/to/source
DST=/path/to/destination

for item in $SRC/*; do
    if [[ -f "$DST/$(basename "$item")" ]]; then
        newitem=$(basename $item)_old
        while [[ -f "$DST/$newitem" ]]; do
            newitem=${newitem}_old
        done
        mv "$DST/$(basename $item)" "$DST/$newitem"
    fi
    mv "$item" "$DST/$(basename $item)"
done

1
En lugar de este script, uno podría ejecutar directamente el cpseguido por el mvcomando.
reza.safiyat

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.