Score:0

การย้ายไฟล์จากไดรฟ์ขนาดใหญ่ 1 ไดรฟ์ไปยังไดรฟ์ขนาดเล็ก 2 ไดรฟ์

ธง th

ฉันกำลังพยายามเขียนสคริปต์ที่จะย้ายไฟล์จากไดรฟ์ขนาดใหญ่หนึ่งไปยังไดรฟ์ที่เล็กกว่าสองไดรฟ์ - ฉันคิดว่ามันจะดีกว่าถ้าสลับกัน ดังนั้นย้ายไฟล์ที่ 1 ไปยังไดรฟ์ A, ไฟล์ที่ 2 ไปยังไดรฟ์ B, ไฟล์ที่ 3 ไปยัง A เป็นต้น.... ไม่สำคัญว่าจะทำตามลำดับ สามารถเลือกแบบสุ่มได้ (ฉันแค่คิดว่ามันน่าจะง่ายกว่า) - สำคัญกว่าที่ฉันมี 2 ไดรฟ์ที่มีไฟล์จำนวนใกล้เคียงกัน หรือมีคำสั่งให้คัดลอก ??TB จากไดรฟ์หนึ่งไปยังอีกไดรฟ์หนึ่ง?? หรือคัดลอกจนกว่าไดรฟ์จะเต็ม

ระบบปฏิบัติการคือ Ubuntu 18.04.6 LTS

นี่เป็นส่วนดั้งเดิมของสคริปต์ที่เป็นสาเหตุของปัญหา มันเริ่มจากการคัดลอกข้อมูลไปยังไดรฟ์ 1 และไดรฟ์ 2 แต่จากนั้นคัดลอกไปที่ไดรฟ์ 1 ดังนั้นฉันจึงลงเอยด้วยไดรฟ์หนึ่งซึ่งเต็มและอีกไดรฟ์เกือบว่างเปล่า

DATA=/บ้าน/ข้อมูล
DATADRIVES=(/media/Drive1/data /media/Drive2/data)

รับต่ำสุด () {
    ต่ำสุด=${DATADRIVES[0]}
    สำหรับไดรฟ์ใน ${DATADRIVES[@]}; ทำ
        ถ้า [[ $(du $DRIVE) < $(du $LOWEST) ]]; แล้ว
            ต่ำสุด = $ DRIVE
        ไฟ
    เสร็จแล้ว
}


echo "กำลังคัดลอกข้อมูลจากไดรฟ์"
echo "ไดรฟ์: ${DATADRIVES[@]}"
FILESTOCOPY=$(ค้นหา "$DATA"/* -type f)
สำหรับ F ใน ${FILESTOCOPY[@]}; ทำ
    รับต่ำสุด
    echo "กำลังคัดลอกไปยัง $LOWEST"
    rsync --progress -S $F $ต่ำสุด
เสร็จแล้ว
in flag
ฟังดูเหมือนแบบฝึกหัดทางวิชาการคุณสามารถ [แก้ไข] คำถามของคุณเพื่อรวม: (0) เวอร์ชันของ Ubuntu ที่คุณใช้งานอยู่ (1) สคริปต์ใด ๆ ที่คุณเขียนไว้แล้วเพื่อลองและทำงานนี้ (2) บทสรุปของสิ่งที่ไม่ทำงานกับสคริปต์นั้น . การทำเช่นนี้อาจเป็นไปได้ที่จะเสนอวิธีแก้ปัญหา *และ* เรียนรู้สิ่งใหม่ ๆ ไปพร้อมกัน
waltinator avatar
it flag
วิธีที่ง่ายกว่าคือการคัดลอกไปยัง A จนเต็ม คัดลอกไปที่ B
bac0n avatar
cn flag
สิ่งเหล่านี้จัดอยู่ในไดเร็กทอรีหรือไม่?
th flag
@waltinator นี่ฟังดูเหมือนวิธีแก้ปัญหาที่ง่ายที่สุด - คุณช่วยยกตัวอย่างวิธีการทำได้ไหม
th flag
@bac0n ข้อมูลต้นฉบับอยู่ในโฟลเดอร์เดียวและจะถูกย้ายไปยังไดรฟ์อื่นในโฟลเดอร์ชื่อเดียวกัน
th flag
@bac0n ฉันไม่สามารถเปลี่ยนชื่อข้อมูลได้จนกว่าจะมีวิธีเปลี่ยนกลับเมื่อถูกย้าย - แต่ฉันคิดว่านั่นจะทำให้ข้อมูลซับซ้อนเกินไป
th flag
มีวิธีที่ฉันสามารถพูดได้ว่าคัดลอกข้อมูล 2TB จากไดรฟ์ A ไปยังไดรฟ์ B หรือไม่
Score:1
ธง 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}

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา