我想在此代码中添加命令行选项-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”,它应该正常工作。
有谁知道如何将其添加到我的脚本中?
答案 0 :(得分:1)
我敢打赌,这远非理想,但以下怎么样?这使用find
来重命名文件,但如果不提供-r
,则会向参数添加-maxdepth 1
。然后,它在基于Debian的系统(例如Ubuntu)上使用rename(1)
命令重命名匹配的文件。 -print0
和xargs -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/"