есть ли способ определить, копируется ли файл из одного каталога в другой

Раствор Perl.

#!/usr/bin/perl
use warnings;
use strict;
use feature qw{ say };

use List::Util qw{ shuffle };

open my $fh_list, '<', shift or die $!;
chomp( my @words = sort <$fh_list> );

open my $fh_ban, '<', shift or die $!;
my %ban;
while (<$fh_ban>) {
    chomp;
    my ($ban1, $ban2) = sort split /-/;
    undef $ban{"$ban1-$ban2"};
}

my @all;
for my $i1 (0.. $#words) {
    for my $i2 ($i1 + 1.. $#words) {
        my $pair = [ $i1, $i2 ];
        push @all, $pair unless exists $ban{"$words[$i1]-$words[$i2]"};
    }
}

my @solutions;
my %used;
while (@solutions < 6) {
    my $solution = join ' ', sort +(shuffle(0.. $#all))[0.. 4];
    redo if exists $used{$solution};

    undef $used{$solution};
    push @solutions, [
        map join('-', @words[
            @{ $all[$_] }[int rand 2 ? (0, 1) : (1, 0)]
        ]), split ' ', $solution
    ];
}

say join "\n", @$_, '---' for @solutions;

Сначала он считывает слова в массив, а запрещенные пары — в хэш. Затем он генерирует все возможные комбинации, в которых первый элемент сортируется перед вторым. Затем он перемешивает все возможные пары и выбирает первые пять, пока не будет найдено 6 различных решений. Массив «@all» содержит только индексы элементов, и они случайным образом перемешиваются при выводе соответствующих элементов, поэтому вы можете получить как «Кот -Собака», так и «Собака -Кот».

Пример вывода:

Elephant-Cat
Monkey-Cat
Fish-Elephant
Monkey-Fish
Frog-Tiger
---
Tiger-Cat
Tiger-Fish
Fish-Elephant
Dog-Monkey
Cat-Frog
---
Tiger-Fish
Cat-Elephant
Elephant-Frog
Mouse-Elephant
Frog-Cat
---
Tiger-Fish
Mouse-Fish
Monkey-Fish
Frog-Tiger
Cat-Dog
---
Dog-Frog
Elephant-Frog
Dog-Tiger
Tiger-Mouse
Tiger-Monkey
---
Tiger-Cat
Elephant-Frog
Tiger-Mouse
Cat-Frog
Cat-Dog
---
2
06.11.2020, 23:03
1 ответ

Попробуйте использовать rsync с параметром--progress в следующий раз.

Вот небольшой фрагмент, который поможет вам получать статус прогресса каждую секунду, пока он не достигнет 100% процентов; Просто замените пути к исходному и целевому файлам.

n="$(du -sh <path_to_your_source_file> | awk '{print $1}' | sed 's/[^0-9.]*//g')"
while true; do sourcesize="$n" destdir=<path_to_your_dest_file> copyprogress="$(export | du -sh $destdir | awk '{print $1}' | sed 's/[^0-9.]*//g' )" ; echo "scale=3 ; $copyprogress / $sourcesize * 100" | bc | xargs echo -n ; echo % completed ; sleep 1 ; done

enter image description here

Также вы можете проверить, выполняется ли команда cp, используя pidof и использовать ps для проверки всей выполняемой команды:

enter image description here

1
18.03.2021, 22:51

Теги

Похожие вопросы