[英]Find & replace recursively except for certain files
關於這篇文章 ,我如何排除一個或多個文件應用字符串替換? 通過使用上述職位為例,我希望能夠在不同的 ,也就是說,一個給定目錄的所有后代文件“橘子”,以取代“蘋果” ./fpd/font/symbol.php
。
我的想法是在find命令中使用-regex
開關,但不幸的是它沒有像grep
命令那樣的-v
選項,因此我無法否定正則表達式與必須進行替換的文件不匹配。
沒有測試過,但它應該工作:
find . -path ./fpd/font/symbol.php -prune -o -exec sed -i 's/apple/orange/g' {} \;
你可以否定!
(或-not
)與-name
結合使用:
$ find .
.
./a
./a/b.txt
./b
./b/a.txt
$ find . -name \*a\* -print
./a
./b/a.txt
$ find . ! -name \*a\* -print
.
./a/b.txt
./b
$ find . -not -name \*a\* -print
.
./a/b.txt
./b
我在我的Git存儲庫中使用它:
grep -ilr orange . | grep -v ".git" | grep -e "\\.php$" | xargs sed -i s/orange/apple/g {}
它會:
.git
文件夾; .php
文件。 毋庸置疑,您可以包含多個grep
圖層,以便過濾傳遞給xargs
的列表。
已知的問題:
至少在我的Windows環境中,它無法打開路徑或名稱中包含空格的文件。 從未想過那一個。 如果有人知道如何解決這個問題,我想知道。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.