2012-04-21 109 views
0

感謝您閱讀&您的建議。我正在將文件移動到各自的目錄中,只有部分文件使用_,有些使用-(下劃線和連字符)作爲分隔符。有沒有辦法測試不同的分隔符?shell腳本來測試文件名中的分隔符字符

如:

ParentDir 
    1897/ 
    1898/ 
    1994summer/ 
    file-1897-001.txt 
    file-1897-002.txt 
    file-1898-001.txt 
    file-1898-002.txt 
    file_1994summer_001.txt 
    file_1994summer_002.txt 

我一直在下面的處理(詳細,所以我能理解它)shell腳本:

!/bin/sh 
for f in *.jp2 
do 
base=${f%.txt} 
echo "base fileName is $base" 
fileName=`echo "$base" | cut -f 2 -d _` 
echo "truncated fileName is $fileName" 
dir=$fileName 
echo "Directory is $dir" 
mv -v "$f" "$dir" 
sleep 1 
done 

當使用剪切命令,我想能夠區分分隔符。那可能嗎?預先感謝您的時間&建議。 乾杯!

+1

case * $ {fName} in * _ *)underscore_processing $ {fName} ;; * - *)hyphen_process $ {fName} ;; *)all_other_processing $ {fName} ;; esac'。祝你好運。 – shellter 2012-04-21 17:41:18

+0

爲了便於攜帶,我想保留當前的she-bang,即'#!/ bin/sh'。我發現了一些其他需要bash的建議 - 是否有一種解決方法可以完全保留Bourne shell? – CanOfBees 2012-04-21 17:42:42

+0

嗨@shellter - 感謝您的迴應!我會馬上測試它。 – CanOfBees 2012-04-21 17:43:17

回答

1
case "${fName}" in 
    *_*) underscore_funnyFace_processing "${fName}" ;; 
    *-*) hyphen_funnyFace_process "${fName}" ;; 
    *) all_other_processing "${fName}" ;; 
esac 

我幾乎可以肯定bourne shell支持的情況下處理。無法訪問其中一個進行測試。

bourne/bash/ksh/zsh之間的區別在於shell通配符模式,每個shell都有作爲bourne shell支持的基本模式的擴展。

我希望這會有所幫助。

+0

嗨貝特,是的!這是*非常有用(和教育)。再次感謝您的答案! – CanOfBees 2012-04-21 23:02:33

+0

是的,這是很好的香草sh。儘管如此,你應該在每個地方圍繞「$ {fName}」放雙引號。 – 2012-04-21 23:09:06

+0

@MarkReed:是的,你說得對。編輯答案。我今天很匆忙。感謝讓它變得更好。祝你們好運。 – shellter 2012-04-22 00:13:36