我想对目录树中的所有(例如).md文件执行相同的操作,但是[可能递归]。
perl -pi -e 's/FOO/BAR/g' *.md
答案 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