使用 shell 修改文件夹及其所有子文件夹中的文件
Using shell to modify files in a folder and all its subfolders
我想使用 shell 编写一个程序,给定 "FolderA"(本例中的目录名称)。它会检查 FolderA 中的所有文件以及 FolderA 的所有子文件夹中的所有文件中的一个词 (wordA) 并将其替换为另一个词 (wordB)。
尝试了一些东西,比如
sed -i 's/wordA/wordB/g' 文件夹A/*
但这会出错,因为文件夹 A 中还有其他文件夹,而 sed 在运行到另一个子文件夹时会出错。
我想不出一种方法来使用 find 获取目录和所有子目录中的所有文件,然后对它们执行 sed。有没有办法做到这一点?我是 shell.
的新手
谢谢!
您可以为此使用 find -exec
:
find /FolderA -type f -exec sed -i 's/wordA/wordB/g' {} +
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[@]}"
我想使用 shell 编写一个程序,给定 "FolderA"(本例中的目录名称)。它会检查 FolderA 中的所有文件以及 FolderA 的所有子文件夹中的所有文件中的一个词 (wordA) 并将其替换为另一个词 (wordB)。
尝试了一些东西,比如 sed -i 's/wordA/wordB/g' 文件夹A/*
但这会出错,因为文件夹 A 中还有其他文件夹,而 sed 在运行到另一个子文件夹时会出错。
我想不出一种方法来使用 find 获取目录和所有子目录中的所有文件,然后对它们执行 sed。有没有办法做到这一点?我是 shell.
的新手谢谢!
您可以为此使用 find -exec
:
find /FolderA -type f -exec sed -i 's/wordA/wordB/g' {} +
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[@]}"