1

我有一个 bash 脚本集,它在包含许多照片的文件夹中执行,并根据用户输入将它们按顺序拼接成全景图。生成完成后,将输出文件重命名为$x-pano.jpg并向上移动一个文件夹。

我的问题是数字前缀基于脚本的顺序执行,这意味着所有文件都会1-pano.jpg根据n-pano.jpg脚本执行期间生成的全景图数量重命名。

如何修改重命名过程以查看存储文件夹并获得最大的$x?我想将该数字增加 1 并用作文件的数字前缀。我目前的代码是

//get the list of files in directory and sort in increasing order
$filelist=$(find ../ -maxdepth 1 -type f | sort -n)

//get number of files
$length=${filelist[@]}

//get the last file
$lastFile=${fileList[$((length-1))]}

将获取文件列表,按升序排序并从列表中获取最后一个文件。这就是我卡住的地方。用作-分隔符,如何捕获当前值?

4

2 回答 2

1

您可能正在寻找构造,它从变量的末尾${var%%foo}剥离最长foo

$ F=1-pano.jpg
$ echo ${F%%-pano.jpg}
1
$ F=1222-pano.jpg
$ echo ${F%%-pano.jpg}
1222

试试lastNum=${lastFile%%-pano.jpg}

于 2012-06-21T02:41:27.353 回答
1

假设这只是一个重命名任务:

$ find jason-pics/ -type f
jason-pics/other.jpg
jason-pics/somefile.jpg
jason-pics/mountain.jpg
jason-pics/car.jpg

重命名:

i=0 
for jfile in $(find jason-pics/ -type f)
    do 
        echo "Renaming $jfile to jason-pics-rename/$i-pano-$(basename $jfile)" 
        ((i+=1)) 
        cp -v $jfile jason-pics-rename/$i-pano-$(basename $jfile)
done

jason-pics-rename 目录的内容:

$ find jason-pics-rename/ -type f 
jason-pics-rename/4-pano-car.jpg
jason-pics-rename/1-pano-other.jpg
jason-pics-rename/3-pano-mountain.jpg
jason-pics-rename/2-pano-somefile.jpg

删除 basename 以将文件重命名为 1-pano.jpg 到 n-pano.jpg

$ i=0; for jfile in $(find jason-pics/ -type f); do echo "Renaming $jfile to jason-pics-rename/$i-pano-$(basename $jfile)" ;((i+=1)); cp -v $jfile jason-pics-rename/$i-pano.jpg; done

内容是:

$ find jason-pics-rename/ -type f 
jason-pics-rename/3-pano.jpg
jason-pics-rename/2-pano.jpg
jason-pics-rename/1-pano.jpg
jason-pics-rename/4-pano.jpg
于 2012-06-21T04:14:26.173 回答