Comment déplacer un répertoire, fichier par fichier? (au lieu de «copier puis supprimer»)

20

Mon ordinateur possède un lecteur de 500 Go.

Je souhaite déplacer 400 Go de données de /unencryptedvers /encrypted.

Les deux répertoires sont sur la même partition, mais /encryptedsont gérés par ecryptfs , il en mv /uncrypted/* /encryptedserait de même:

  1. Copiez tous les fichiers vers la destination
  2. Ensuite, supprimez-les de la source

... que je ne peux pas me permettre, car cela nécessite 800 Go.
Si les fichiers étaient déplacés un par un, il n'y aurait aucun problème (la zone ecryptfs est dynamique).

Existe-t-il une mvoption ou un autre outil qui déplace un répertoire fichier par fichier?
Il y a un grand nombre de fichiers, donc ARG_MAX pourrait être un problème pour les solutions basées sur des scripts.

Nicolas Raoul
la source

Réponses:

20

Si vous avez rsync(supprimer --dry-runpour le faire pour de vrai):

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

Sinon, en utilisant bash4 + et 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

Pour l'exécuter pour de vrai, supprimez echode chaque commande.

Chris Down
la source
J'adore l'idée de rsync! Apparemment, les fichiers sont en effet supprimés lorsqu'ils sont déplacés: superuser.com/questions/405761
Nicolas Raoul
@NicolasRaoul Si je me souviens bien, les suppressions sont mises en mémoire tampon, mais il est proche de copier / supprimer en un.
Chris Down
Les morceaux me conviennent, tant que chaque morceau pèse moins de 50 Go.
Nicolas Raoul
N'auriez-vous pas besoin de supprimer également --dry-runde la ligne de commande rsync?
un CVn
1
@meduz vest facultatif et imprime simplement les noms de fichiers lors de leur transfert. aHAXest requis pour conserver tous les attributs de fichier possibles - aest une archive, HAXest "conserver les liens physiques, les listes de contrôle d'accès et les attributs étendus".
Chris Down