Копирование файлов по одному с паузами между файлами - PullRequest
0 голосов
/ 05 апреля 2020

Я хочу иметь возможность копировать большие tar-файлы (по 100 ГБ каждый) по одному, и при необходимости действий пользователя (нажмите Enter, чтобы перейти к следующему файлу) между файлами. Как вы видите, я использовал для поиска список .tar файлов.

Я получаю эту ошибку:

cp: ./script_v_1_working: Нет такого файла или каталог

destination="$HOME/Desktop/NEW"

array=(`find * -iname "*.tar"`)

for val in ${array[@]}; do
    cp $val $destination
    read -n 1 -r -s -p $'press enter to continue...\n'
done

Заранее благодарен за помощь!

Обновление:

В итоге я использовал этот код:

destination="$HOME/Desktop/NEW"

for files in *.tar ; do echo copying "$files" ; cp "$files" "$destination" ; read -n 1 -p "Press any key..." ; done

Ответы [ 2 ]

0 голосов
/ 05 апреля 2020

Как вы сказали в комментарии, пробелы - это проблема. Когда вы создаете массив, все пробелы действуют как разделитель, поэтому вы получаете ошибки «not found», потому что вы пытаетесь обработать частичные имена файлов.

Вы должны начать с создания правильного списка файлов :

mapfile -d $'\0' array < <(find * -iname "*.tar" -print0)

В этой команде вы указываете find разделять результаты на ноль, а затем подаете его на mapfile для хранения всего в array, интерпретируя ноль как разделитель записей .

Теперь вы можете обработать этот список, который теперь правильно маркирован, с остальной частью вашего скрипта. Но остерегайтесь пробелов! Вы не должны позволять оболочке выполнять свою обычную обработку имен файлов, поэтому вы должны указать все свои переменные:

destination="$HOME/Desktop/NEW"

for val in "${array[@]}"
do
    cp "$val" "$destination"
    read -n 1 -r -s -p $'press enter to continue...\n'
done
0 голосов
/ 05 апреля 2020

Вы можете использовать read -n 1, чтобы дождаться, когда пользователь нажмет любую клавишу. Поэтому, если вы хотите скопировать все файлы в каталоге в целевой каталог, вы можете сделать что-то вроде этого

for file in *.tar; do
    echo "copying" $file
    cp "$file" "$destination"
    read -n 1 -p "press enter ..."
done

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...