次のスクリプトを使用して、mergecapコマンドを使用していくつかのpcapファイルを1つにマージしています。しかし、実行すると'basename: extra operand /mnt/md0/capture/DCN/dcn_2014_02_04_00_11_47_598.pcap'
エラーが発生しますスクリプトは次のとおりです
#!/bin/bash
#find last 15 files older than +5 days
FILES=$(find /mnt/md0/capture/DCN/ -maxdepth 1 -type f -name "*.pcap" -mtime +5 -print0 | xargs -0 ls -lt | tail -15 | awk '{print $8}')
N=15
TAG1=$(basename ${FILES[0]} | sed 's/.pcap//')
TAG2=$(basename ${FILES[$N-1]} | sed 's/.pcap//')
#merge the files
mergecap -w /mnt/md0/capture/DCN/"${TAG1}_to_${TAG2}".pcap ${FILES[@]}
Sudo chmod +rw /mnt/md0/capture/DCN/"${TAG1}_to_${TAG2}".pcap
#delete originals
Sudo rm ${FILES[@]}
FILES=$(command)
は、FILES
という名前の変数をcommand
の出力を含むスカラーに設定します。
_${FILES[0]}
_は、そのスカラー変数の内容になります。この場合、15個の空白で区切られたファイル名を含む文字列であり、15個のフィールドに分割されます。
FILES
を配列にしたいようです。そのためには、FILES=( $(command) )
を使用します。
シェル変数アクセスを二重引用符(_"${FILES[0]}"
_ではなく_${FILES[0]}
_)で囲むこともお勧めします。これにより、シェルに空白がある場合にコンテンツがフィールドに分割されなくなります。