2013-01-31 39 views
-1

我正在使用Mac OSX終端並使用find然後在文件上執行sed。我如何獲得它列出已更改的文件?顯示使用sed更改的文件的文件名,例如grep顯示的文件

這是我使用的是什麼:

find . -name '*.js' -exec sed -i '' 's/_persistenceURL = "prod"/_persistenceURL = "qa"/g' {} + 

,我喜歡如何輸出相匹配的......我能得到這個從sed的文件列表?

find . -name "*.js" -exec grep -lr "_persistenceURL = \"prod\"" {} \; 
+0

所以你提供了'sed'的文件列表來處理,但你想知道哪些文件實際發生了改變? – trojanfoe

+0

是的,這幾乎是要點 –

+0

或至少顯示文件的發展進程,因爲它通過成千上萬的文件。 –

回答

1

這裏是通過添加第二個-exec行動,以查找statment呼應SED過程之前的文件名它做一個快速和骯髒的方式:

find . -name '*.js' -exec echo "{}" \; -exec sed -i '' 's/_persistenceURL = "prod"/_persistenceURL = "qa"/g' {} + 

注:+末可能干擾了一下,所以如果不是絕對必要的話,我會用\;替換它。

+0

這似乎工作,迴應它找到的每個文件。我已經採取了你的語法這樣做,並代替呼應我把我的grep所以只列出了具有內部的內容我在尋找,文件等等的綜合列表將由sed的變更文件在找到該文件後立即運行。謝謝! 找到。 -name'* .js'-exec grep -lr'_persistenceURL =「prod」'{} \; -exec sed -i''s/_persistenceURL =「prod」/ _ persistenceURL =「qa」/ g'{} + –

+0

更好!樂意效勞。 – nullrevolution

+1

不需要'-exec'。只需在'-exec'前加'-print'即可。但是這也打印沒有改變的文件。 –

0

sed沒有提供一種機制來返回一個值,也沒有訪問的文件名。但你可以這麼做:

find . -name '*.js' -exec sh -c \ 
    'sed "s/_persistenceURL = \"prod\"/_persistenceURL = \"qa\"/g" $0 > $0.$$; \ 
    if ! cmp $0.$$ $0; then echo $0; mv $0.$$ $0; else rm $0.$$; fi' {} \; 

這可能會是很多清潔把命令腳本和exec腳本。請注意,它使用內部shell的pid作爲臨時文件的後綴。要小心,因爲這可能會覆蓋文件。把這個命令放在一個腳本中,然後添加一些這樣的檢查。