使用shell修改文件夹及其所有子文件夹中的文件

时间:2015-01-29 20:14:09

标签: bash shell sed find

我想用shell编写一个程序givien" FolderA" (此示例中的目录名称)。它会检查FolderA中的所有文件以及FolderA的所有子文件夹中的所有文件(wordA),并将其替换为另一个单词(wordB)。

尝试了一些类似的事情 sed -i' s / wordA / wordB / g' FolderA / *

但由于文件夹A中存在其他文件夹而导致错误,因此当sed运行到另一个子文件夹时会出错。

我无法想出一种方法来使用find来获取目录和所有子目录中的所有文件,然后对它们进行sed。有没有办法做到这一点?我很陌生。

谢谢!

2 个答案:

答案 0 :(得分:2)

您可以使用find -exec

find /FolderA -type f -exec sed -i 's/wordA/wordB/g' {} +

答案 1 :(得分:0)

find将是您要走的路。

bash替代方案:

shopt -s globstar
files=()
for file in FolderA/**; do   # double asterisk is not a typo
    [[ -f "$file" ]] && files+=("$file")
done
sed -i 's/wordA/wordB/g' "${files[@]}"