概要
再帰的処理を行い、置換をするプログラムを2つ作りました。
- ファイルの中身を変更
- ファイル名を変更
0. ワンライナーあった
find . -name "*.html" -type f -exec sed -i '' -e 's/TextToReplace/ReplacementText/' {} \;
1. ファイルの中身を変更
301 Moved Permanently
#!/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. ファイル名を変更
301 Moved Permanently
#!/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
[改訂第3版]シェルスクリプト基本リファレンス ──#!/bin/shで、ここまでできる (WEB+DB PRESS plus)
定番の1冊『シェルスクリプト基本リファレンス』の改訂第3版。 シェルスクリプトの知識は、プログラマにとって長く役立つ知識です。 本書では、複数のプラットフォームに対応できる移植性の高いシェルスクリプト作成に主眼を置き、 基本から丁寧に解説。...
Comments
ファイル名を再帰的に一括置換するためのスクリプトを探していて、こちらに辿り着きました。早速利用させていただいてます。
…しかし、このスクリプトだと、ディレクトリ名にスペースが入ってしまっているサブディレクトリ以下のファイルのリネームには失敗してしまいますね。
# Samba サーバーだと、ユーザーがそういうフォルダを作ってしまいやすい。
「こうすればいい」という解を提示することができなくて恐縮ですが、パスにスペースが入ってしまっている場合にどうするかというギミックを追加できると嬉しいですね。
すいません。そこまで想定していませんでした。
運用で回避という、エンジニアらしからぬ発言ですが、下のディレクトリへcdしてからやるとか。。。。
うさぎ好きですか?飼ってます!
https://twitter.com/milklog