Bir dizini, dosyayı dosyaya nasıl taşırım? ("kopyala sonra kaldır" yerine)


20

Bilgisayarımda bir adet 500 GB sürücü var.

400 GB'lik verileri 'den' /unencryptede taşımak istiyorum /encrypted.

Her iki dizin de aynı bölümdedir , ancak ecryptfs/encrypted tarafından işlenir , bu nedenle :mv /uncrypted/* /encrypted

  1. Tüm dosyaları hedefe kopyala
  2. Sonra onları kaynaktan kaldırın

... bunu karşılayamıyorum, çünkü 800GB gerekiyor.
Dosyalar tek tek taşınsaydı sorun olmazdı (ecryptfs bölgesi dinamiktir).

mvBir dizini dosya dosya hareket ettiren bir seçenek veya başka bir araç var mı ?
Çok sayıda dosya olduğundan, ARG_MAX komut dosyası tabanlı çözümler için bir sorun olabilir.

Yanıtlar:


20

Varsa rsync( --dry-rungerçek yapmak için kaldırın ):

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

Aksi takdirde, bash4 + ve GNU durumunu kullanarak:

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

Gerçek olarak çalıştırmak için echoher komuttan kaldırın .


Rsync fikrini seviyorum! Görünüşe göre dosyalar taşındıkça kaldırılıyor: superuser.com/questions/405761
Nicolas Raoul

@NicolasRaoul Doğru hatırlıyorsam, kaldırmalar arabelleğe alınır, ancak bire bir kopyalamaya / kaldırmaya yakındır.
Chris Down

Her yığın ağırlığı 50 GB'den az olduğu sürece, tıkaçlar benim için iyi.
Nicolas Raoul

--dry-runRsync komut satırından da kaldırmanız gerekmez mi ?
CVn

1
@meduz visteğe bağlıdır ve dosya adlarını aktarıldıkça yazdırır. aHAXtüm olası dosya özniteliklerini korumak için gereklidir - aarşivdir, HAX"sabit, ACL ve genişletilmiş öznitelikleri sakla" dır.
Chris Down
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.