Bagaimana cara memindahkan direktori, file demi file? (Alih-alih "salin lalu hapus")


20

Komputer saya memiliki satu drive 500GB.

Saya ingin memindahkan 400GB data dari /unencryptedke /encrypted.

Kedua direktori berada di partisi yang sama, tetapi /encryptedditangani oleh ecryptfs , demikian mv /uncrypted/* /encryptedjuga:

  1. Salin semua file ke tujuan
  2. Kemudian hapus dari sumbernya

... yang saya tidak mampu, karena membutuhkan 800GB.
Jika file dipindahkan satu per satu, tidak akan ada masalah (zona ecryptfs dinamis).

Apakah ada mvopsi atau alat lain, yang memindahkan direktori file-by-file?
Ada banyak file, jadi ARG_MAX mungkin menjadi masalah untuk solusi berbasis skrip.

Jawaban:


20

Jika sudah rsync(hapus --dry-rununtuk melakukannya secara nyata):

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

Jika tidak, gunakan bash4 + dan stat GNU:

#!/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

Untuk menjalankannya secara nyata, hapus echodari setiap perintah.


Saya suka ide rsync! Rupanya file memang dihapus saat dipindahkan: superuser.com/questions/405761
Nicolas Raoul

@NicolasRaoul Jika saya ingat dengan benar, kepindahan di-buffer, tetapi dekat dengan satu-ke-satu salin / hapus.
Chris Down

Potongan baik-baik saja untuk saya, selama masing-masing potongan beratnya kurang dari 50GB.
Nicolas Raoul

Tidakkah Anda perlu menghapus --dry-rundari baris perintah rsync juga?
CVn

1
@meduz vadalah opsional dan hanya mencetak nama file saat ditransfer. aHAXdiperlukan untuk menjaga semua atribut file yang mungkin - aadalah arsip, HAXadalah "simpan hardlink, ACL, dan atribut diperluas".
Chris Down
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.