2011-03-31 73 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