我有一个包含数千个.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脚本。非常感谢您的帮助。
答案 0 :(得分:0)
您应该删除最后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
答案 1 :(得分:0)
脚本的问题是,您要遍历具有完整绝对路径的文件列表,然后尝试写入与当前目录的子目录序列相同的路径。
您将要从每个文件名中删除路径。您可以使用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