Bash

Basename 給出額外的操作數錯誤

  • February 5, 2014

我正在使用以下腳本使用 mergecap 命令將幾個 pcap 文件合併為一個。但是當我執行它時它給了我一個'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) ) .

用雙引號將 shell 變數訪問括起來也是一種好習慣——"${FILES[0]}"而不是${FILES[0]}——這樣如果其中有任何空格,shell 就不會將內容分解為欄位。

引用自:https://unix.stackexchange.com/questions/113625