搜索了很多,都感觉太复杂。最后找到了一个简单办法。
其中特别要注意两点:
- 文件名包含空格的列出处理。
- 使用包含空格的参数。
#!/bin/bash
function processFile()
{
# 如果字串中有/,需要使用别的分隔符。DEST_TEXT中假设相同特性。
if [[ "${SOURCE_TEXT}" == "*/*" ]]; then
sed -i "s:${SOURCE_TEXT}:${DEST_TEXT}:g" "$1"
else
sed -i "s/${SOURCE_TEXT}/${DEST_TEXT}/g" "$1"
fi
}
function processDir()
{
cd "$1"
# space to ?
files=`ls | tr " " "\?"`
for item in ${files}
do
if [ -d "${item}" ]; then
processDir "${item}"
else
processFile "${item}"
fi
done
cd ..
}
SOURCE_TEXT=avcodec_alloc_frame
DEST_TEXT=av_frame_alloc
PROCESS_DIR=doubango/doubango/schemas
processDir ${PROCESS_DIR}