再帰置換するシェルスクリプト – ファイル名 と 中身

概要

再帰的処理を行い、置換をするプログラムを2つ作りました。

  1. ファイルの中身を変更
  2. ファイル名を変更

0. ワンライナーあった

find . -name "*.html" -type f -exec sed -i '' -e 's/TextToReplace/ReplacementText/' {} \;

1. ファイルの中身を変更

https://matsu.teraren.com/static/replace_contents.sh

#!/bin/bash

#-----------------------------------------------
# Replace SEARCH string with REPLACEMENT string for the contents.
USAGE="Usage: % ./replace_contents.sh search replacement"
#
# @author Yuki Matsukura
# @version $Id:$
#-----------------------------------------------

# String of partical match
FILEMATCH="*"

# String of partical match
SEARCH=$1

# String of replacement
REPLACEMENT=$2

if [ $# -ne 2 ]; then
  echo "Insufficient parameter error" 1>&2
  echo $USAGE 1>&2
  exit 1
fi




for i in `find . -type f -name "*$FILEMATCH*"`
do
  # contents replacement
  TEMPFILE=`mktemp`
  sed "s/$SEARCH/$REPLACEMENT/g" $i > $TEMPFILE
  mv $TEMPFILE $i 

done

2. ファイル名を変更

https://matsu.teraren.com/static/replace_filename.sh
#!/bin/bash

#-----------------------------------------------
# Replace SEARCH string with REPLACEMENT string for filename.
USAGE="Usage: % ./replace_filename.sh search replacement"
#
# @author Yuki Matsukura
# @version $Id:$
#-----------------------------------------------

# String of partical match
SEARCH=$1

# String of replacement
REPLACEMENT=$2

if [ $# -ne 2 ]; then
  echo "Insufficient parameter error" 1>&2
  echo $USAGE 1>&2
  exit 1
fi


for i in `find . -type f -name "*$SEARCH*"`
do
  # file name replacement
  REPLACEMENT_FILE=`echo $i | sed "s/$SEARCH/$REPLACEMENT/g"`
  mv $i $REPLACEMENT_FILE

done

matsubokkuri

Please feel free to contact me via e-mail, twitter and facebook!

あわせて読みたい

2件のフィードバック

  1. HeliosReds より:

    ファイル名を再帰的に一括置換するためのスクリプトを探していて、こちらに辿り着きました。早速利用させていただいてます。

    …しかし、このスクリプトだと、ディレクトリ名にスペースが入ってしまっているサブディレクトリ以下のファイルのリネームには失敗してしまいますね。

    # Samba サーバーだと、ユーザーがそういうフォルダを作ってしまいやすい。

    「こうすればいい」という解を提示することができなくて恐縮ですが、パスにスペースが入ってしまっている場合にどうするかというギミックを追加できると嬉しいですね。

  2. Yuki Matsukura より:

    すいません。そこまで想定していませんでした。

    運用で回避という、エンジニアらしからぬ発言ですが、下のディレクトリへcdしてからやるとか。。。。

    うさぎ好きですか?飼ってます!
    https://twitter.com/milklog

コメントを残す