Điểm:0

Di chuyển tệp từ 1 ổ đĩa lớn sang 2 ổ đĩa nhỏ hơn

lá cờ th

Tôi đang cố gắng viết một tập lệnh sẽ di chuyển các tệp từ một ổ đĩa lớn sang hai ổ đĩa nhỏ hơn - tôi nghĩ sẽ tốt hơn nếu thực hiện luân phiên. Vì vậy, hãy di chuyển tệp thứ nhất sang ổ A, tệp thứ 2 sang ổ B, tệp thứ 3 sang A, v.v .... Việc chúng được thực hiện theo thứ tự thực sự không quan trọng, chúng có thể được chọn ngẫu nhiên (tôi chỉ nghĩ rằng nó sẽ dễ dàng hơn) - điều quan trọng hơn là tôi có 2 ổ đĩa chứa một lượng tệp tương tự nhau. hoặc có một lệnh chỉ sao chép ??TB từ ổ đĩa này sang ổ đĩa khác?? hoặc sao chép cho đến khi đầy ổ đĩa.

Hệ điều hành là Ubuntu 18.04.6 LTS

Đây là phần gốc của tập lệnh gây ra sự cố. Nó bắt đầu sao chép dữ liệu vào Ổ đĩa 1 và Ổ đĩa 2, nhưng sau đó chỉ sao chép vào ổ đĩa 1. Vì vậy, tôi kết thúc với một ổ đĩa đầy và ổ đĩa kia gần như trống rỗng.

DỮ LIỆU=/nhà/dữ liệu
DATADRIVES=(/media/Drive1/data /media/Drive2/data)

getLoest () {
    LOWEST=${DATADRIVES[0]}
    cho DRIVE trong ${DATADRIVES[@]}; làm
        nếu [[ $(du $DRIVE) < $(du $LOWEST) ]]; sau đó
            THẤP NHẤT=$DRIVE
        fi
    xong
}


echo "Đang sao chép dữ liệu từ Ổ đĩa"
tiếng vang "DRIVES: ${DATADRIVES[@]}"
FILESTOCOPY=$(tìm "$DATA"/* -type f)
cho F trong ${FILESTOCOPY[@]}; làm
    nhận được thấp nhất
    echo "Đang sao chép vào $LOWEST"
    rsync --progress -S $F $THẤP NHẤT
xong
lá cờ in
Điều này nghe giống như một bài tập học thuật.Bạn có thể [chỉnh sửa] câu hỏi của mình để bao gồm: (0) phiên bản Ubuntu bạn đang chạy (1) bất kỳ tập lệnh nào bạn đã viết để thử và thực hiện tác vụ này (2) tóm tắt về những gì không hoạt động với tập lệnh đó . Bằng cách này, có thể đưa ra giải pháp *và* học được điều gì đó mới trong quá trình thực hiện
waltinator avatar
lá cờ it
Cách đơn giản hơn là copy vào A cho đến khi đầy thì copy sang B.
bac0n avatar
lá cờ cn
Chúng có được tổ chức trong các thư mục không?
lá cờ th
@waltinator điều này nghe có vẻ giống như giải pháp đơn giản nhất - bạn có thể cho tôi một ví dụ về cách thực hiện không?
lá cờ th
@bac0n dữ liệu gốc chỉ nằm trong một thư mục và sẽ được chuyển sang ổ đĩa khác vào một thư mục cùng tên
lá cờ th
@bac0n Tôi không thể đổi tên dữ liệu trừ khi có cách thay đổi lại dữ liệu đó khi dữ liệu được di chuyển - nhưng tôi nghĩ điều đó sẽ làm phức tạp hóa dữ liệu.
lá cờ th
Có cách nào để tôi có thể nói sao chép 2TB dữ liệu từ ổ A sang ổ B không ??
Điểm:1
lá cờ cn

If you divide your tasks into two steps, first, you divide and save the filenames of the bigger drive into two files. To alternate between the different files, a simple modulus is used which gives us 0, 1, 0, 1 the number is used to resolve the file used for the filenames, .e.g, 0 resolves names_0.txt and so on. The file list should only contain all end nodes (files, links, and empty folders) and no starting point. For the last part cpio is used instead of moving the files (I believe copying does not put as much strain on the heart as mv does). The same principle is used to resolve the targets for cpio.

#!/bin/bash

a=0
b=$PWD
c=$b/source

declare -A A=( \
    [0]=$b/names_0.txt [1]=$b/names_1.txt [$b/names_0.txt]=$b/mnt/target_0 [$b/names_1.txt]=$b/mnt/target_1 \
)

rm -f "${A[0]}" "${A[1]}"
                           #            0,1,0,1
while IFS= read -rd ''; do #            ⌄
    printf %s\\0 "$REPLY" >> "${A[$((++a % 2))]}"
                           #  ⌃
                           #  $b/names_0.txt, $b/names_1.txt
done < <(find "$c" \( \( -type d -empty \) -o ! -type d \) -printf %P\\0 | sort -zV)

#   $b/names_0.txt, ...
#   ⌄
for d in "${A[0]}" "${A[1]}"; do
#                          $b/mnt/target_0
#                          ⌄
    cpio -0 -pvdm -D "$c" "${A[$d]}" < "$d"
done #                                  ⌃
     #                                  $b/names_0.txt

I used a simple install script to generate a test example:

#!/bin/bash

a=0
for i in source/{a..z}/{0..20}; do
    install -D /dev/null $i/file_$((++a)).txt
done
mkdir -p mnt/target_{0..1}

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.