``` find test_111 -type d -name "com.bjnsh*" -exec sed -i 's/bjnsh/test_bjnsh/g' {} \;```修改代码 可以替换directory
时间: 2024-11-30 09:17:27 浏览: 1
显示/光电技术中的图形点阵式液晶显示器MSP-G320240在高速处
在给定的命令中,`find test_111 -type d -name "com.bjnsh*" -exec sed -i 's/bjnsh/test_bjnsh/g' {} \;`的作用是在`test_111`目录及其子目录中寻找名称包含 "bjnsh" 的所有目录,并对这些目录内的内容执行sed替换操作。然而,由于`not a regular file`的错误提示,说明`sed`试图在一个目录路径上直接运行,而不是目录里的文件。
如果你想让`sed`仅在目录中的实际文件(如`.java`, `.xml`等)里做替换,你可以稍微调整命令。首先,确保你不会误删目录本身,可以添加 `-execdir` 参数,它会使得sed在当前目录中查找并处理文件:
```bash
find test_111 -type f \( -path '*/com.bjnsh*' -o -name "*bjnsh*" \) -execdir sed -i 's/bjnsh/test_bjnsh/g' {} +
```
这里使用了 `-path '*/com.bjnsh*'` 来找出包含 `com.bjnsh*` 子目录的路径,同时 `-name "*bjnsh*"` 查找直接包含 "bjnsh" 的文件名。`+` 后面的加号表示sed一次性处理多个匹配项,这样更高效。
如果只想替换特定类型的文件,比如.java文件,可以在`-execdir`后指定文件扩展名:
```bash
find test_111 -type f -name "*.java" -execdir sed -i 's/bjnsh/test_bjnsh/g' {} +
```
注意,这些改动仍然假设`test_111`目录存在并且有足够的权限进行修改。如果你遇到进一步的问题,可能还需要检查目录权限和文件编码等问题。
阅读全文