Рейтинг:0

Перемещение файлов с 1 большого диска на 2 меньших диска

флаг th

Я пытаюсь написать скрипт, который будет перемещать файлы с одного большого диска на два меньших диска - я подумал, что было бы лучше, если бы он делал это попеременно. Итак, переместите 1-й файл на диск A, 2-й файл на диск B, 3-й файл на A и т. д.... На самом деле не имеет значения, что они сделаны по порядку, их можно было выбрать случайным образом (я просто подумал, что это будет проще) - важнее, чтобы у меня было 2 диска с одинаковым количеством файлов. или есть команда просто скопировать ??TB с одного диска на другой?? или копировать, пока диск не будет заполнен.

ОС — Ubuntu 18.04.6 LTS.

Это исходная часть сценария, которая вызывает проблему. Он начинает копирование данных на диск 1 и диск 2, а затем просто копирует на диск 1. Таким образом, я получаю один полный диск, а другой почти пустой.

ДАННЫЕ=/дом/данные
DATADRIVES=(/носитель/Диск1/данные /носитель/Диск2/данные)

получитьСамое низкое () {
    САМЫЙ НИЗКИЙ=${DATADRIVES[0]}
    для ДИСК в ${DATADRIVES[@]}; делать
        если [[ $(du $DRIVE) < $(du $LOWEST) ]]; тогда
            САМЫЙ НИЗКИЙ=$Драйв
        фи
    сделано
}


echo "Копирование данных с дисков"
echo "ДИСКИ: ${DATADRIVES[@]}"
FILESTOCOPY=$(найти "$DATA"/* -тип f)
для F в ${FILESTOCOPY[@]}; делать
    получитьнизкий
    echo "Теперь копирование в $LOWEST"
    rsync --progress -S $F $САМЫЙ НИЗКИЙ
сделано
флаг in
Это звучит как академическое упражнение.Не могли бы вы [отредактировать] свой вопрос, включив в него: (0) версию Ubuntu, которую вы используете (1) любой скрипт, который вы уже написали, чтобы попытаться выполнить эту задачу (2) краткое описание того, что не работает с этим скриптом . Делая это, можно предложить решение *и* узнать что-то новое на этом пути.
waltinator avatar
флаг it
Более простым способом было бы скопировать в A, пока он не заполнится, скопировать в B.
bac0n avatar
флаг cn
Они организованы в каталоги?
флаг th
@waltinator это звучит как самое простое решение - не могли бы вы привести пример, как это сделать?
флаг th
@ bac0n исходные данные находятся только в одной папке и должны быть перемещены на другой диск в папку с таким же именем
флаг th
@ bac0n Я не могу переименовать данные, если нет способа вернуть их обратно при перемещении, но я думаю, что это слишком усложнит.
флаг th
Есть ли способ, которым я могу просто скопировать 2 ТБ данных с диска A на диск B ??
Рейтинг: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}

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.