添加命令行选项-r

时间:2011-03-31 10:59:25

标签: bash shell

我想在此代码中添加命令行选项-r recurse:

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

因此,如果我输入“change -r txt doc”,则应该在任何子文件夹上递归执行该命令。例如,如果有一个文件aaa.txt和一个包含文件y / bbb.txt和y / ccc.txt的目录y,它应该产生文件aaa.doc,y / bbb.doc和y / ccc .DOC。

此外,如果我不提供“-r”,它应该正常工作。

有谁知道如何将其添加到我的脚本中?

1 个答案:

答案 0 :(得分: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/"