Basename dá erro de operand extra

1

Estou usando o seguinte script para mesclar alguns arquivos pcap em um usando o comando mergecap. Mas quando eu executo isso me dá um erro 'basename: extra operand /mnt/md0/capture/DCN/dcn_2014_02_04_00_11_47_598.pcap' O script é o seguinte

#!/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[@]}
    
por Jishnu U Nair 05.02.2014 / 08:47

1 resposta

4

FILES=$(command) irá definir uma variável chamada FILES para um escalar que contenha a saída de command .

${FILES[0]} será o conteúdo dessa variável escalar, no seu caso, uma string contendo 15 nomes de arquivos delimitados em branco, que serão divididos em 15 campos.

Parece que você quer que FILES seja uma matriz; para isso, use FILES=( $(command) ) .

Também é uma boa prática cercar os acessos variáveis do shell com aspas duplas - "${FILES[0]}" ao invés de ${FILES[0]} - para que o shell não quebre o conteúdo em campos se houver algum espaço em branco neles.

    
por 05.02.2014 / 09:59