¿Cómo mover un directorio, archivo por archivo? (en lugar de "copiar y luego eliminar")

20

Mi computadora tiene una unidad de 500GB.

Quiero mover 400 GB de datos de /unencrypteda /encrypted.

Ambos directorios están en la misma partición, pero /encryptedes manejado por ecryptfs , así mv /uncrypted/* /encryptedque lo haría:

  1. Copie todos los archivos al destino
  2. Luego quítelos de la fuente

... que no puedo pagar, porque requiere 800GB.
Si los archivos se movieran uno por uno, no habría problema (la zona ecryptfs es dinámica).

¿Existe una mvopción u otra herramienta que mueva un directorio archivo por archivo?
Hay una gran cantidad de archivos, por lo que ARG_MAX podría ser un problema para las soluciones basadas en scripts.

Nicolas Raoul
fuente

Respuestas:

20

Si tienes rsync(eliminar --dry-runpara hacerlo de verdad):

rsync --dry-run --remove-source-files -avHAX /unencrypted/ /encrypted

De lo contrario, usando bash4 + y GNU stat:

#!/bin/bash

set -e

shopt -s nullglob globstar

for from in /unencrypted/**/*; do
    to="${from/\/un//}"
    if [[ -d "$from" ]]; then
        echo mkdir -p "$to"
        echo chmod "$(stat -c %a "$from")" "$to"
        echo chown "$(stat -c %u:%g "$from")" "$to"
    else
        echo cp -a "$from" "$to" && echo rm "$from"
    fi
done

echo rm -r /unencrypted

Para ejecutarlo de verdad, elimine echode cada comando.

Chris Down
fuente
¡Me encanta la idea de rsync! Aparentemente, los archivos se eliminan a medida que se mueven: superuser.com/questions/405761
Nicolas Raoul
@NicolasRaoul Si recuerdo correctamente, las eliminaciones se almacenan en el búfer, pero está cerca de copiar / eliminar uno a uno.
Chris Down
Los trozos están bien para mí, siempre que cada trozo pese menos de 50 GB.
Nicolas Raoul
¿No necesitarías eliminar también --dry-runde la línea de comando rsync?
un CVn
1
@meduz ves opcional y solo imprime los nombres de los archivos a medida que se transfieren. aHAXes necesario para mantener todos los atributos de archivo posibles: aes archivo, HAXes "mantener enlaces duros, ACL y atributos extendidos".
Chris Down