2011-03-31 78 views
3

我想添加一個命令行選項-r,遞歸,這個代碼:添加命令行選項-r

for name in *.$1; do 
    stripped_name="$(basename "$name" ".$1")" 
    mv "$name.$1" "$name.$2" 
done 

所以,如果我進入「更改-r TXT文檔」命令應該被執行遞歸地在任何子文件夾上。例如,如果存在文件aaa.txt和包含文件y/bbb.txt和y/ccc.txt的目錄y,則應該生成文件aaa.doc,y/bbb.doc和y/ccc .DOC。

此外,如果我不提供「-r」,它應該正常工作。

有誰知道如何將其添加到我的腳本?

回答

1

我敢打賭,這遠非理想,但以下情況如何?這使用find來獲取文件重命名,但如果您不提供提供-r,它將-maxdepth 1添加到參數。然後它在基於Debian的系統(例如Ubuntu)上使用rename(1)命令來重命名匹配的文件。該-print0xargs -0確保這不會有奇怪的問題,文件名可能包含換行符等

#!/bin/bash 

if [ x"$1" = x-r ] 
then 
    FIND_OPTIONS="" 
    shift 
else 
    FIND_OPTIONS="-maxdepth 1" 
fi 

FROM="$1" 
TO="$2" 

find . $FIND_OPTIONS -name '*.'$FROM -print0 | xargs -0 rename "s/\.$FROM/\.$TO/" 
+0

我想也許用「案例」來選擇-r。我在想這樣寫。你怎麼看?順便說一句,感謝您的建議和代碼馬克。 – 2011-03-31 12:35:54

+1

我不認爲在這裏有任何需要使用'case'的情況 - '-r'或者不存在,而不是幾種可能性之一。 – 2011-03-31 13:10:57