Como mover um diretório, arquivo por arquivo? (em vez de "copiar e remover")


20

Meu computador possui uma unidade de 500 GB.

Quero mover 400 GB de dados de /unencryptedpara /encrypted.

Ambos os diretórios estão na mesma partição, mas /encryptedsão manipulados por ecryptfs , portanto mv /uncrypted/* /encrypted:

  1. Copie todos os arquivos para o destino
  2. Em seguida, remova-os da fonte

... o que não posso pagar, porque requer 800 GB.
Se os arquivos fossem movidos um por um, não haveria problema (a zona ecryptfs é dinâmica).

Existe uma mvopção ou outra ferramenta que move um diretório arquivo por arquivo?
Como existe um grande número de arquivos, o ARG_MAX pode ser um problema para soluções baseadas em script.

Respostas:


20

Se você tiver rsync(remova --dry-runpara fazer isso de verdade):

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

Caso contrário, usando o bash4 + e o 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 executá-lo de verdade, remova echode cada comando.


Adoro a ideia rsync! Aparentemente, os arquivos são de fato removido como eles são movidos: superuser.com/questions/405761
Nicolas Raoul

@NicolasRaoul Se bem me lembro, as remoções são armazenadas em buffer, mas é quase uma cópia / remoção individual.
21313 Chris Down

Os pedaços são bons para mim, desde que cada pedaço tenha menos de 50 GB.
Nicolas Raoul

Você não precisaria remover --dry-runda linha de comando do rsync também?
um CVn

11
O @meduz vé opcional e apenas imprime os nomes dos arquivos à medida que são transferidos. aHAXé necessário para manter todos os atributos de arquivo possíveis - aé archive, HAXé "mantém hardlinks, ACLs e atributos estendidos".
23413 Chris Down
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.