为fswebcam生成唯一的文件名

时间:2015-01-05 02:50:10

标签: shell unix ubuntu

我在我的ubuntu中安装了fswebcam。我希望fswebcam提供输出为img1,img2(如果img1在那里),img3,img4 ...等

我试过了:

sudo fswebcam img

它将文件存储为 img ,但替换现有文件而不是存储为 img2
是否有任何特定类型的unix命令来存储我指定的文件名?

3 个答案:

答案 0 :(得分:11)

或者您可以使用其内置的strftime功能以文件名中的当前时间生成每个文件

--save pic%Y-%m-%d_%H:%M:%S.jpg

答案 1 :(得分:1)

我还想知道具体命令是否存在。同时,我也需要这样做,我使用了一个解决方法如下(根据您的需要):

f() {
    PREFIX="./img"
    FILES=$(ls $PREFIX* 2> /dev/null)
    LAST=$(sort -n <<<"${FILES//$PREFIX}" | tail -n1)
    echo $PREFIX$((LAST+1))
}

FILES包含由\n分隔的文件名 LAST之后,$PREFIX将没有任何内容或最大数字 最后,函数echo'将最后一个文件名加1。

因此,一旦定义了f(或更重要的名称),就可以像这样调用命令:

sudo fswebcam $(f)

实施例

$ ls
img1  img10  img11  img2  img3  img4  img5  img6  img7  img8  img9
$ echo $(f) # here I'm using "echo" instead of "sudo fswebcam"
./img12

f一步一步

$ FILES=$(ls $PREFIX* 2> /dev/null)
$ cat <<<"$FILES"
./img1
./img10
./img11
./img2
./img3
./img4
./img5
./img6
./img7
./img8
./img9
$ LAST=$(sort -n <<<"${FILES//$PREFIX}" | tail -n1)
$ echo $LAST
11
$ echo $PREFIX$((LAST+1))
./img12

答案 2 :(得分:0)

location="your location directory"
cd $location
ls
fname='filename'
i=1
j=1
    sudo fswebcam $fname 
    if [ -f $fname ]
    then
        echo "exist"
        while [ -f $fname$i ]
        do
            echo $fname$i
            i=$((i + j))
        done
        mv $fname $fname$i
    else
        echo "oops not found"
    fi