我有这个 bash:
replace="s/AAAA/BBBB/g";
find myDirectory/. -type f -print0 | xargs -0 sed -i $replace;
Run Code Online (Sandbox Code Playgroud)
这将递归扫描myDirectory树并替换那里文件上所有出现的AAAAwith BBBB。
但我想限制这种情况发生在特定的扩展的文件,例如.txt,.read,.po
我如何施加这个限制?
jor*_*anm 12
您可以使用-namefind 选项来限制基于文件名的匹配。
find myDirectory/. -type f -name '*.txt' -print0 | xargs -0 sed -i "$replace"
Run Code Online (Sandbox Code Playgroud)
对于多个扩展名,您可以使用-o(或)并将它们与().
find myDirectory/. -type f \( -name '*.txt' -o -name '*.read' \) -print0 | xargs -0 sed -i "$replace"
Run Code Online (Sandbox Code Playgroud)
可以进行的另一个改进是使用-exec代替xargs. 这更加便携并且消除了子shell。
find myDirectory/. -type f -name '*.txt' -exec sed -i "$replace" {} +
Run Code Online (Sandbox Code Playgroud)