2011-03-22 60 views

回答

7
find . -type f -name '*.a' -print0 | xargs -0 -IZZ mv ZZ ZZ.b 

這應該處理與空間和/或換行符的文件名。它也不會重命名目錄(另一種解決方案在做查找)。如果你希望它是不區分大小寫,使用 「-iname」 代替 「-name」

1

要重命名<files>那個,rename 's/\.a$/.a.b/' <files>。這樣做遞歸地只需要一些循環。

(或使用**/**/*/**/*/*/*等爲文件)

+0

如果bash的4,然後'禁用了javascript -s globstar'和使用''**對不起 – 2011-03-22 13:43:06

1

嘗試下面的腳本:

for file in `find . -name '*.a'`; do mv $file $file.b; done 
+3

,但不會處理在正確的文件名中的空格和換行 - 你可能想使用-print0和xargs的嘗試 - 代替0。 – George 2011-03-22 02:18:39

+0

或者:找。 -name'* .a'|同時讀-r x;做mv「$ x」「$ x.b」;完成 – 2011-03-22 09:04:18

2

紅寶石(1.9+)

$ ruby -e 'Dir["**/*.a"].each{|x|File.file?x && File.rename(x,"#{x}.b")}' 

在shell腳本(至少巴什4)

shopt -s globstar 
shopt -s nullglob 
for file in **/*.a 
do 
echo mv "${file}" "${file}.b" 
done 
+0

對不起,我的瀏覽器似乎在顯示不同的答案。我現在看到的版本肯定是遞歸的。這似乎也是一個很好的解決方案! – 2011-03-22 02:26:07