我只想将当前目录和子目录中的所有* .a文件重命名为* .a.b,如何在shell脚本中执行此操作?
答案 0 :(得分:7)
find . -type f -name '*.a' -print0 | xargs -0 -IZZ mv ZZ ZZ.b
这应该处理带有空格和/或换行符的文件名。它也不重命名目录(另一个解决方案是查找)。如果您希望它不区分大小写,请使用“-iname”而不是“-name”
答案 1 :(得分:2)
红宝石(1.9 +)
$ ruby -e 'Dir["**/*.a"].each{|x|File.file?x && File.rename(x,"#{x}.b")}'
在shell脚本中(至少是Bash 4)
shopt -s globstar
shopt -s nullglob
for file in **/*.a
do
echo mv "${file}" "${file}.b"
done
答案 2 :(得分:1)
要使用<files>
重命名rename 's/\.a$/.a.b/' <files>
。递归执行此操作只需要进行一些循环。
(或使用*
,*/*
,*/*/*
,*/*/*/*
等文件)
答案 3 :(得分:1)
尝试以下脚本:
for file in `find . -name '*.a'`; do mv $file $file.b; done