2014-05-01 86 views
-1

最近的產品品牌更新促使我將工作區中舊產品名稱的每個實例更改爲新產品名稱。這涉及到不僅要更改每個文件類型的源代碼,還要更改文件和目錄名稱。將工作區中產品名稱的每個實例更改爲新的產品名稱

此外,源代碼版本由SVN控制。因此我不想在.svn目錄中更改任何內容。這增加了一個有趣的警告...

下面的腳本基本上是我使用的地方「舊名稱」是舊產品名稱和「新名稱」是新的。我在更改文件和目錄名稱時遇到問題。我確信它必須在文件系統上動態重命名這些路徑。另外,我還沒有想出如何跳過.svn目錄。我想知道是否有更聰明的方法來做到這一點,也許使用Python?

(我寧願這是一個腳本的情況下,產品的名稱再次變更)

#!/bin/sh 

exts=('*.m', '*.java'); 

# change text 
for ext in "${exts[@]}" 
do 
    find . -name $ext -type f -exec sed -i 's/oldname/newname/' {} \; 
    find . -name $ext -type f -exec sed -i 's/OldName/NewName/' {} \; 
    find . -name $ext -type f -exec sed -i 's/OLDNAME/NEWNAME/' {} \; 
done 

# change file names 
find . -name "*oldname*" -type f -exec rename oldname newname {} \; 
find . -name "*OldName*" -type f -exec rename OldName NewName {} \; 
find . -name "*OLDNAME*" -type f -exec rename OLDNAME NEWNAME {} \; 

# change directory names 
find . -name "*oldname*" -type d -exec rename oldname newname {} \; 
find . -name "*OldName*" -type d -exec rename OldName NewName {} \; 
find . -name "*OLDNAME*" -type d -exec rename OLDNAME NEWNAME {} \; 
+2

微米。 ..如何解決「不硬編碼的事情將改變」?使用「productname」重命名舊產品名稱的所有出現,然後在單個位置爲產品名稱分配一個值。 – honi

+0

我想先讓它工作,但很好的建議。謝謝 – GPL

回答

0
  1. 從性能POV find ... -exec壞主意(TM)find ... -print0 | xargs -0好了很多
  2. 版本化對象的OS類型重命名爲錯誤的想法(tm)再次:您將破壞歷史記錄,svn mv必須被稱爲
  3. 與忽視的.svn文件夾中找到(而不是文件夾 - 您使用SVN新鮮的客戶端,不是嗎?)是find -not -iwholename '*.svn' -name ...
  4. 使用ack輕鬆很多,比找
+0

太棒了,我會試試這些 – GPL