![使用 Sed 查找并替换,而不是常规文件](https://linux22.com/image/122230/%E4%BD%BF%E7%94%A8%20Sed%20%E6%9F%A5%E6%89%BE%E5%B9%B6%E6%9B%BF%E6%8D%A2%EF%BC%8C%E8%80%8C%E4%B8%8D%E6%98%AF%E5%B8%B8%E8%A7%84%E6%96%87%E4%BB%B6.png)
我正在开发一个便携式 anaconda 包,我尝试使用 find 和 sed 查找所有文件并替换当前目录及其子目录中文件内的路径。
然而,当我执行该命令时,sed 抛出错误:
sed: couldn't edit anaconda3: not a regular file
我正在使用的命令是:
find ./ -type f -exec sed -i -e "s+/opt/conda_tools+$TOOLKIT_DIR+g" * {} \;
我使用 + 作为分隔符,因为 / 是路径的一部分。我正在执行脚本的目录的内容是:
drwxr-xr-x 24 test_user linuxusers 4096 十一月 21 16:07 anaconda3
单独执行 find 命令会按预期列出文件,但由于某种原因,目录名称仍然被选取。我还尝试了该命令的以下变体,但没有成功:
find ./ -type f -exec sed -i '' "s+/opt/conda_tools+$INSTALL_DIR+g" * {} \;
我以前曾成功使用过 find 和 sed,但我有点困惑下一步该去哪里。有什么明显的错误是我在这里遗漏的,或者不那么明显的吗?
答案1
删除其中的“*”
find ./ -type f -exec sed -ie "s+/opt/conda_tools+$TOOLKIT_DIR+g" * {} \;
所以
find ./ -type f -exec sed -ie "s+/opt/conda_tools+$TOOLKIT_DIR+g" {} \;