Come spostare una directory, file per file? (anziché "copia e rimuovi")


20

Il mio computer ha un'unità da 500 GB.

Voglio spostare 400 GB di dati da /unencrypteda /encrypted.

Entrambe le directory sono sulla stessa partizione, ma /encryptedsono gestite da ecryptfs , quindi mv /uncrypted/* /encrypted:

  1. Copia tutti i file nella destinazione
  2. Quindi rimuoverli dalla fonte

... che non posso permettermi, perché richiede 800 GB.
Se i file fossero spostati uno a uno, non ci sarebbero problemi (la zona di ecryptfs è dinamica).

Esiste mvun'opzione o un altro strumento che sposta una directory file per file?
Esiste un numero enorme di file, quindi ARG_MAX potrebbe essere un problema per le soluzioni basate su script.

Risposte:


20

Se hai rsync(rimuovi --dry-runper farlo davvero):

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

Altrimenti, usando bash4 + e 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

Per eseguirlo per davvero, rimuovere echoda ogni comando.


Adoro l'idea rsync! Apparentemente i file vengono effettivamente rimossi mentre vengono spostati: superuser.com/questions/405761
Nicolas Raoul,

@NicolasRaoul Se ricordo bene, le rimozioni sono memorizzate nel buffer, ma è vicino alla copia / rimozione one-to-one.
Chris Down,

I pezzi vanno bene per me, purché ogni pezzo pesa meno di 50 GB.
Nicolas Raoul,

Non avresti bisogno di rimuovere anche --dry-rundalla riga di comando rsync?
un CVn

1
@meduz vè facoltativo e stampa semplicemente i nomi dei file mentre vengono trasferiti. aHAXè necessario per conservare tutti i possibili attributi di file - aè archivio, HAXè "conserva hardlink, ACL e attributi estesi".
Chris Down,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.