常抓到的檔案中有空格或底線,
自己習慣都轉成以點來替代,
所以可用以下的script快速就更換過來。
檔名中所有的底線換成點:
#!/bin/bash
# 設成這個檔名 under2dot.sh
rename()
{
startDir=.
for arg in "$@" ; do
find $startDir \( -name "*_*" -o -name "*_*" \) -print |
while read old ; do
new=$(echo "$old" | tr -s '\011' ' ' | tr -s '_' '.')
mv "$old" "$new"
done
done
}
rename d f # Renames your directories with spaces first, then files
檔名中所有的空格轉換成點:
#!/bin/bash
# 設成這個檔名 space2dot.sh
rename()
{
startDir=.
for arg in "$@" ; do
find $startDir \( -name "* *" -o -name "* *" \) -print |
while read old ; do
new=$(echo "$old" | tr -s '\011' ' ' | tr -s ' ' '.')
mv "$old" "$new"
done
done
}
rename d f # Renames your directories with spaces first, then files
這個 script 是後面要加個檔名為參數用的:
#!/bin/bash
# 設成這個檔名 fspace2dot.sh
old=$1
new=$(echo "$old" | tr -s '\011' ' ' | tr -s ' ' '.')
mv "$old" "$new"
有空格或是底線通常都是不認得的字元,難道您都下載......
您多心了,現在的檔名都很長,不是都用空格或底線或點來做分隔嗎?
我是統一用點來儲存,免得相同檔案卻因不同的分隔符號造成重覆或找不到。
如果搜尋能夠略過 空格、底線、點 來做檔名的比對的話,就不用這麼麻煩了。
那請問目錄名稱也可以轉換嗎
試了一下,目錄也可以。
小弟都是用軟體作
可以試試用antrenemer
對程式苦手的我來說還挺方便的
分享的script是在linux上用的。
在windows上就沒有什麼好方法,除非裝cygwin之類,才能在XP上用shell script。
用google找不到 antrenemer 的相關結果,
敬請告知正確的名稱,好讓我參考,謝謝。
應該是ant renamer吧?
另外我是覺得cygwin有點肥大,所以有需要我大概都會用msys跑shell script。
一時筆誤
應該是Ant renamer
CMD下我是用一個爛方法...只能適用檔案裡有一個底線
<pre class="c" name="code">
dir /b *_* > filename.txt
for /f "tokens=1,2 delims=_ " %%I in (filename.txt) do ren %%I_%%J %%I.%%J
不知道有沒有高手想出比較好的...
不過如果真的有這個需求,寫程式還比較好做一點= =a
自己很主觀的感覺,原始windows的環境當中,有關處理字串及 regular expression 方面的功能很弱,以致想要做相關的功能受到相當大的限制及不便。
先進的 powershell 好像才有比較像樣的 regular expression 的處理能力…
古早以前曾用過 4DOS,以及現在發展下來的 4NT ,可能會較容易處理吧?
其實我也納悶,到底是因為傳統發展下來 *nix 的 shell 環境中,可能彈性空間比較大呢?還是因為累積了許多的 script 的範例可參考,才覺得能做的事多?往往想要找 windows 方面 script 的範例,相對比較起來就不易找到或者比較少。大概是因重於圖型環境,就減少了文字方面的發展吧。
在windows下使用Ant renamer還蠻不賴的, 而且是完全免費而且還開放原始碼.
介紹網址分享如后:
http://blog.joaoko.net/archives/225