bash или shell script - преобразование файлов pcap в csv - PullRequest
0 голосов
/ 14 февраля 2019

У меня есть папка, содержащая тысячи файлов .pcap, и я хочу преобразовать эти файлы в .csv (например: 1.pcap -> 1.csv, 2.pcap -> 2.csv, ...).

Я написал этот сценарий bash:

#!/bin/bash

for f in /home/pc/Desktop/pcapfiles/*.pcap; do
tshark -r ./"$f" -T fields -e frame.number -e frame.time -e ip.src -e ip.dst -e ip.proto -e frame.len -E header=y -E separator=, -E quote=d -E occurrence=f> ./"${f%.pcap}.csv"

done

PS: я пытался выполнить эту задачу с помощью пакетного сценария (я уже опубликовал вопрос, но он не работал со мнойПоэтому я решил попробовать скрипт bash или shell. Я буду очень благодарен за вашу помощь.

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

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

Вызахочет удалить путь из каждого имени файла.Вы можете сделать это с помощью basename или с подстановкой параметров, что аналогично тому, как вы уже обрезаете расширение .csv.

Даже тогда вы не можете использовать ./"$f" для ссылки на "$f", потому что этобудет означать /path/to/current/directory/home/pc/Desktop/pcapfiles/first.pcap и т. д.

#!/bin/bash

for f in /home/pc/Desktop/pcapfiles/*.pcap; do
    base=${f##*/}
    tshark -r "$f" \
        -T fields -e frame.number -e frame.time \
        -e ip.src -e ip.dst -e ip.proto -e frame.len \
        -E header=y -E separator=, -E quote=d \
        -E occurrence=f> ./"${base%.pcap}.csv"
done
0 голосов
/ 14 февраля 2019

Вы должны удалить последние 5 символов, чтобы удалить расширение .pcap и добавить csv

#!/bin/bash

for f in /home/pc/Desktop/pcapfiles/*.pcap; do
    tshark -r ./"$f" -T fields -e frame.number -e frame.time -e ip.src -e ip.dst -e ip.proto -e frame.len -E header=y -E separator=, -E quote=d -E occurrence=f > ./"{$f::-5}".csv"
done
...