2012-06-21 166 views
1

我有一個bash腳本集,它在包含大量照片的文件夾中執行,並根據用戶輸入順序將它們拼接成全景圖。生成完成後,輸出文件將重命名爲$x-pano.jpg,並將一個文件夾移到更高的位置。使用bash腳本重命名文件

我的問題是數字前綴是基於腳本的順序執行,這意味着根據腳本執行期間生成的全景圖的數量,所有文件都會被重命名爲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))]} 

將獲得文件列表,按升序排序並從列表中獲取最後一個文件。這是我卡住的地方。使用-作爲分隔符,我如何獲取當前值?

+0

在賦值的左側沒有美元符號。添加一組圓括號來創建數組:'filelist =($(find ../ -maxdepth 1 -type f | sort -n))'。要獲得計數:'length = $ {#filelist [@]}'。要獲得最後一個文件:'lastFile = $ {fileList [@]:-1}'(注意數組下標已經是一個算術上下文,所以不需要'$(())',但是直到Bash 4.2您可以使用負面下標,因此您必須在早期版本中使用負片)。 –

回答

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 

內容賈森 - 圖片 - 重命名目錄:

$ 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 

刪除基本名稱的文件重命名爲1-pano.jpg to 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