Puncte:0

Mutarea fișierelor de pe o unitate mare pe 2 unități mai mici

drapel th

Încerc să scriu un script care va muta fișierele de pe o unitate mare pe două unități mai mici - m-am gândit că ar fi mai bine dacă o face alternativ. Deci, mutați primul fișier în unitatea A, al doilea fișier în unitatea B, al treilea fișier în A etc... De fapt, nu contează că sunt făcute în ordine, ar putea fi alese la întâmplare (doar m-am gândit că ar fi mai ușor) - este mai important că am 2 unități care conțin o cantitate similară de fișiere. sau există o comandă pentru a copia doar ??TB de pe o unitate pe alta?? sau copiați până când unitatea este plină.

Sistemul de operare este Ubuntu 18.04.6 LTS

Aceasta este partea originală a scriptului care cauzează problema. Începe să copieze date în Drive 1 și Drive 2, dar apoi doar copiază pe unitatea 1. Așa că ajung cu o unitate plină, iar cealaltă este aproape goală.

DATE=/home/date
DATADRIVES=(/media/Drive1/data /media/Drive2/data)

getLoest () {
    LOWEST=${DATADRIVES[0]}
    pentru DRIVE în ${DATADRIVES[@]}; do
        dacă [[ $(du $DRIVE) < $(du $LOWEST) ]]; atunci
            LOWEST=$DRIVE
        fi
    Terminat
}


echo „Se copiază datele din Drive”
echo „DRIVES: ${DATADRIVES[@]}”
FILESTOCOPY=$(găsiți „$DATE”/* -tip f)
pentru F în ${FILESTOCOPY[@]}; do
    getLost
    echo „Acum se copiează în $LOWEST”
    rsync --progress -S $F $CEST
Terminat
drapel in
Acesta sună ca un exercițiu academic.Ați putea [editați] întrebarea dvs. pentru a include: (0) versiunea de Ubuntu pe care o rulați (1) orice script pe care l-ați scris deja pentru a încerca să efectuați această sarcină (2) un rezumat al ceea ce nu funcționează cu acel script . Făcând acest lucru, este posibil să oferiți o soluție *și* să învățați ceva nou pe parcurs
waltinator avatar
drapel it
O modalitate mai simplă ar fi să copiați în A până când este plin, copiați în B.
bac0n avatar
drapel cn
Sunt acestea organizate în directoare?
drapel th
@waltinator sună ca cea mai simplă soluție - poți să-mi dai un exemplu, te rog, despre cum să o fac?
drapel th
@bac0n datele originale sunt doar într-un folder și urmează să fie mutate pe o altă unitate într-un folder cu același nume
drapel th
@bac0n Nu pot redenumi datele decât dacă există o modalitate de a le schimba înapoi când sunt mutate - dar cred că asta le va complica prea mult.
drapel th
Există vreo modalitate prin care pot spune să copiez 2 TB de date de pe unitatea A în unitatea B?
Puncte:1
drapel 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}

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.