替换整个目录中的文件夹中的给定字符串

时间:2014-03-13 18:02:53

标签: perl bash

我想对目录树中的所有(例如).md文件执行相同的操作,但是[可能递归]。

perl -pi -e 's/FOO/BAR/g' *.md

2 个答案:

答案 0 :(得分:4)

使用find

find /path -name "*.md" -exec perl -pi -e 's/FOO/BAR/g' {} \;

答案 1 :(得分:0)

一个简单的&使用bash parameter expansion纯粹的bash one line解决方案:

  $ cd ~/
  $ mkdir test
  $ cd test/
  $ touch foo{1..10}.md
  $ ls
    foo1.md  foo10.md  foo2.md  foo3.md  foo4.md  foo5.md  foo6.md  foo7.md  foo8.md  foo9.md

  $ for file in ./*.md; do mv "$file" "${file/foo/bar}"; done
  $ ls
    bar1.md  bar10.md  bar2.md  bar3.md  bar4.md  bar5.md  bar6.md  bar7.md  bar8.md  bar9.md

当然,它可以与devnull建议的find结合使用:

  $ files=($(find ./test -name "*.md"))
  $ for file in "${files[@]}"; do mv "$file" "${file/foo/bar}"; done

或将find的ouptut传递给循环:

  $ find ./test -name "*.md" | for file in $(xargs -0); do mv "$file" "${file/foo/bar}"; done
相关问题