2013-07-15 103 views
3

我有很多的文件(圖片)這樣的(文件名只從數字組成):重命名基於符號文件名

123456.jpg 
369258.jpg 
987123.jpg 
... 

我需要複印件各一份在其他文件夾(我們將其命名爲輸出)和重命名每個基於數字在他們的名字的文件,像這樣的東西(在僞代碼):

outputFileName = String(filename[0]) + String(filename[1]) + String(filename[2]+filename[3]) + ".jpg" 

因此,大家可以看到,重命名涉及獲得一定的象徵文件名,有時會得到文件中一些符號的總和名稱。

我需要一個腳本來命名大衆所有* .JPG這裏我把劇本基於類似的算法的文件夾中,並輸出我前面提到的輸出文件夾改名的。

這個腳本應該可以通過cygwin shell從macos終端和windows上運行。

+1

即使是*規範*不明確! – devnull

+0

問題必須**表明對正在解決的問題的最小理解**。告訴我們你試圖去做什麼,爲什麼它沒有工作,以及它應該如何工作。另請參閱:[堆棧溢出問題清單](http://meta.stackexchange.com/questions/156810/stack-overflow-question-checklist) – devnull

+0

你可以請更具體什麼仍然不清楚? – Astro

回答

4

我認爲主要問題是:如何獲得bash變量的特定字符以及如何在bash中執行加法。

  1. 要從bash變量中獲取char,可以使用以下格式:${var:START_INDEX:LENGTH}

  2. 執行加法:$((ARG1 + ARG2))

你生成的腳本可能是這樣的:

#!/bin/bash 

for f in *.jpg 
do 
    output=${f:0:1}${f:1:1}$((${f:2:1} + ${f:3:1})).jpg 
    mv -- "$f" "$output" 
done 
+0

非常感謝! – Astro

3

您正在尋找substring extraction

語法是${string:position:length},其中string是變量的名稱,position是起始位置(0是第一個索引),length是子串的長度。

如問題規定,將創建的文件名,並複製它們名爲「輸入」到一個命名的文件夾文件夾中的腳本「輸出」看起來是這樣的:

#!/bin/bash 
for file in input/*.jpg 
do 
    filename="$(basename "$file")" 
    firstChar="${filename:0:1}" 
    secondChar="${filename:1:1}" 
    thirdAndFourthChar="$((${filename:2:1} + ${filename:3:1}))" 
    newfilename="$firstChar$secondChar$thirdAndFourthChar.jpg" 
    cp "$file" "output/$newfilename" 
done 
+0

非常感謝! – Astro