Переместить каталог в другой каталог с сохранением структуры каталогов

Текст может быть преобразован в PCAP, насколько это возможно из ограниченной информации, представленной в выводе tcpdump, например.

#!/usr/bin/env perl
use 5.14.0;
use warnings;
use Time::Piece;

# get this from CPAN
use File::PCAP::Writer ();
my $fpw = File::PCAP::Writer->new( { fname => 'out.pcap' } );

# read tcpdump output from files or standard input
shift @ARGV if @ARGV == 1 and $ARGV[0] eq '-';
while (readline) {
    my ( $stamp, $usec ) = $_ =~ m/^(\d\d:\d\d:\d\d) [.] (\d+) \s IP \s /ax;

    # blindly assume packets all from the same day that is today
    my $now = localtime;
    $stamp = $now->ymd. ' '. $stamp;

    my $epoch = Time::Piece->strptime( $stamp, "%Y-%m-%d %H:%M:%S" )->epoch;

    # fake an empty packet. this gets timestamps into Wireshark,
    # which may suffice to only graph packets per time
    $fpw->packet( $epoch, $usec, 0, 0, '' );
}

хотя потребуется больше кода для правильной обработки меток времени, которые переносятся на следующий день (или, упс, на какую-то последующую дату? )и правильно подделывать пакеты с подсказками, указанными в выводе tcpdump(, например. сделать фрейм, сделать IP (с IP-адресами ), сделать TCP или UDP пакет правильного размера и портов, как насчет ARP и других протоколов, и т.д. и т.п.).

Вместо пакетов в секунду из временных меток без суеты PCAP можно было бы сначала использовать эпоху -до -пакетов -, видимых -в -, что -второй сценарий:

#!/usr/bin/env perl
use 5.14.0;
use warnings;
use Time::Piece;

# start epoch
my $day = 1505199600;

my $counter   = 0;
my $prev_secs = -1;
my $prev_ts;

shift @ARGV if @ARGV == 1 and $ARGV[0] eq '-';
while (readline) {
    my ($hhmmss) = $_ =~ m/^(\d\d:\d\d:\d\d) [.] /ax;
    my $secs = Time::Piece->strptime( $hhmmss, "%H:%M:%S" )->epoch;

    # KLUGE assume next day
    $day += 86400 if $secs < $prev_secs;
    my $timestamp = $day + $secs;

    if ( defined $prev_ts and $timestamp != $prev_ts ) {
        say "$prev_ts $counter";
        $counter = 0;
    }

    $counter++;
    $prev_secs = $secs;
    $prev_ts   = $timestamp;
}

say "$prev_ts $counter";

А затем передайте преобразованный вывод tcpdumpв R для построения графика (Я подделал временную метку следующего дня, так как все ваши данные относятся к одной и той же секунде):

$ head -1 dumptext 
20:39:12.808672 IP 94.xx.xxx.202.49183 > 151.xx.xx.xx.61479: UDP, length 104
$ tail -1 dumptext 
00:31:18.123456 IP 79.xxx.xxx.216.56254 > 151.xx.xx.xx.443: Flags [P.], seq 1723903877:1723904632, ack 3204952387, win 260, length 755
$ perl torrr dumptext > dataforr
$ cat dataforr 
1505273952 10
1505287878 1
$ R
> x=read.table("dataforr")
> x
          V1 V2
1 1505273952 10
2 1505287878  1
> names(x)=c('date','packets')
> x$date=strptime(x$date,"%s")
> x
                 date packets
1 2017-09-12 20:39:12      10
2 2017-09-13 00:31:18       1
> plot(x,type='l')
> 
-1
10.12.2019, 12:46
1 ответ

mv скопирует «последний» объект в место назначения. В вашем случае вы можете сначала создать каталог назначения, а затем переместить файлы

mkdir /dir2/dir1/
mv /dir1/subdir/ /dir2/dir1/

или используйте rsync для копирования и удаления источника, а затем

rsync -av dir1 dir2/
sending incremental file list
dir1/
dir1/subdir/
dir1/subdir/test1
dir1/subdir/test2

rm -r dir1
1
28.01.2020, 05:09

Теги

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