使用bash脚本重命名文件

时间:2012-06-21 01:55:38

标签: bash shell file-rename

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

我的问题是数字前缀基于脚本的顺序执行,这意味着所有文件都会根据脚本执行期间生成的全景图片数量重命名为1-pano.jpgn-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))]}

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

2 个答案:

答案 0 :(得分:1)

您可能正在寻找${var%%foo} construct, which strips the longest foo from the end of a variable

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

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

答案 1 :(得分: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