Làm thế nào để di chuyển một thư mục, tập tin theo tập tin? (thay vì sao chép sau đó xóa bỏ)


20

Máy tính của tôi có một ổ đĩa 500 GB.

Tôi muốn chuyển 400GB dữ liệu từ /unencryptedsang /encrypted.

Cả hai thư mục nằm trên cùng một phân vùng, nhưng /encryptedđược xử lý bởi ecryptfs , vì vậy mv /uncrypted/* /encryptedsẽ:

  1. Sao chép tất cả các tệp đến đích
  2. Sau đó loại bỏ chúng khỏi nguồn

... mà tôi không đủ khả năng, vì nó cần 800 GB.
Nếu các tệp được di chuyển từng cái một, sẽ không có vấn đề gì (vùng ecryptfs là động).

Có một mvtùy chọn hoặc một công cụ khác, di chuyển một thư mục từng tập tin?
Có một số lượng lớn các tệp, vì vậy ARG_MAX có thể là một vấn đề đối với các giải pháp dựa trên tập lệnh.

Câu trả lời:


20

Nếu bạn có rsync(loại bỏ --dry-runđể làm điều đó thực sự):

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

Mặt khác, sử dụng bash4 + và 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

Để chạy nó thực sự, loại bỏ echokhỏi mỗi lệnh.


Tôi thích ý tưởng rsync! Rõ ràng các tệp thực sự bị xóa khi chúng được di chuyển: superuser.com/questions/405761
Nicolas Raoul

@NicolasRaoul Nếu tôi nhớ lại một cách chính xác, các phần xóa được đệm, nhưng nó gần với bản sao một / một.
Chris Xuống

Chunks là tốt cho tôi, miễn là mỗi khối lượng trọng lượng dưới 50 GB.
Nicolas Raoul

Bạn cũng không cần phải xóa --dry-runkhỏi dòng lệnh rsync chứ?
một CVn

1
@meduz vlà tùy chọn và chỉ in tên tệp khi chúng được chuyển. aHAXđược yêu cầu để giữ tất cả các thuộc tính tệp có thể - alà lưu trữ, HAXlà "giữ liên kết cứng, ACL và thuộc tính mở rộng".
Chris Xuống
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.