min*_*nto 0 linux command-line sed find path
如何递归替换目录中文件中的字符串(位置路径),二进制文件除外?我试过命令
find . -type f -exec sed -i 's/foo/bar/g' {} +
Run Code Online (Sandbox Code Playgroud)
但它也会替换二进制文件和其他文件(*.o、*.c)中的字符串。我想递归替换所有名为“.depend”的文件中的字符串。
find . -type f -name "*.depend" -exec sed -i 's/foo/bar/g' {} +
或者
find . -type f -not -name "*.c" -not -name "*.o" -exec sed -i 's/foo/bar/g' {} +
-name pattern
Base of file name (the path with the leading directories
removed) matches shell pattern pattern. Because the leading
directories are removed, the file names considered for a match
with -name will never include a slash, so `-name a/b' will
never match anything (you probably need to use -path instead).
A warning is issued if you try to do this, unless the
environment variable POSIXLY_CORRECT is set. The
metacharacters (`*', `?', and `[]') match a `.' at the start
of the base name (this is a change in findutils-4.2.2; see
section STANDARDS CONFORMANCE below). To ignore a directory
and the files under it, use -prune; see an example in the
description of -path. Braces are not recognised as being
special, despite the fact that some shells including Bash
imbue braces with a special meaning in shell patterns. The
filename matching is performed with the use of the fnmatch(3)
library function. Don't forget to enclose the pattern in
quotes in order to protect it from expansion by the shell.
Run Code Online (Sandbox Code Playgroud)
http://man7.org/linux/man-pages/man1/find.1.html