我有一个文件结构,其中有700个目录。所有目录都有一个名为public void fatalError(SAXParseException e)
的文件。我用config.xml
名称前缀了25个目录。现在,我想替换所有这25个目录中的1111-
个文件中的代码块。我希望有一个循环(config.xml
或for
)。
答案 0 :(得分:1)
您可以使用find
,grep
目录搜索文件,并使用sed
替换字符串。
find . -iname 'config.xml' | grep '1111' | sed -i 's/STRINGTOREPLACE/NEWSTRING/'
答案 1 :(得分:1)
试试这个:
find . -name "1111-*" -type d -exec cd {} \; -exec /absolute.path/to/shell_script_modifying_config.xml \;
答案 2 :(得分:0)
我会使用递归函数:
folder_recursive() {
for i in "$1"/*;do
if [ -d "$i" ];then
folder_recursive "$i"
elif [ -f "$i" ]; then
lastFolder = ${$1##*/}
if [[ $lastFolder == *"1111-"* ]]; then
if [[ $i == *"config.xml" ]]; then
#Replace block of code
file_path=$i
original=$(<file_path) # Read from file
to_replace="aaaabbbb"
replacer="xxxxyyyy"
result=${original/$to_replace/$replacer} #This will replace the first instance of to_replace
# If you want to replace all instances use:
# ${original//$to_replace/$replacer}
echo $result > $i #Overwrite file
fi
fi
fi
done
}
path= "root/of/folder/structure"
folder_recursive $path