替换exec中的文件路径的一部分

时间:2013-11-18 15:01:07

标签: bash scripting sed find exec

我想替换每个文件路径的一部分,这将通过find linux命令找到。 我的方法如下:

find . -type f -name "*.txt" -exec echo {} | sed "s/f/u/g" {} \;

我希望在文件路径中用“u”替换每个字母“f”。不幸的是我收到了这个错误:

find: missing argument to `-exec'
sed: can't read {}: No such file or directory
sed: can't read ;: No such file or directory

我做错了什么?谢谢你的帮助。

2 个答案:

答案 0 :(得分:4)

您不需要echo {} |

使用你的find命令:

find . -type f -name "*.txt" -exec sed "s/f/u/g" '{}' \;
  

I would like to replace the part of each file path

如果您只想更改文件名/路径,请使用:

find . -type f -name "*.txt"-exec bash -c 'echo "$1" | sed "s/f/u/g"' - {} \;

答案 1 :(得分:1)

find . -type f -name "*.txt" | while read files
do 
newname=$(echo "${files}" | sed s"@f@u@"g)
mv -v "${files}" "${newname}"
done

我不完全理解文件路径的含义。如果您不是在谈论文件名,请进一步澄清。