搜索了很多,都感觉太复杂。最后找到了一个简单办法。
其中特别要注意两点:
文件名包含空格的列出处理。
使用包含空格的参数。
#!/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}