CentOSで、指定ディレクトリ以下の「ディレクトリ名」の置換リネーム、「ファイル名」の置換リネーム、「ファイル内容」の全文置換

Linuxコマンドsed

一覧

 状態:-  閲覧数:532  投稿日:2016-04-24  更新日:2018-03-30

内容


「ディレクトリ名」の置換リネーム
「ファイル名」の置換リネーム
「ファイル内容」の全文置換

「ディレクトリ名」の置換リネーム

 閲覧数:138 投稿日:2018-03-28 更新日:2018-03-30 

例1


「/var/www/☆☆.tokyo」ディレクトリ以下にある「★★.co」を含むディレクトリ名の「★★.co」を「☆☆.tokyo」へ置換する

前提条件
・最大99階層
・1つのディレクトリ名に「★★.co」は2つ以上含まれることは決してない

▼hoge.sh
for((i=1;i<100;i++))
do find /var/www/☆☆.tokyo -mindepth $i -maxdepth $i -type d -name "*★★.co*" -print0 |
  xargs -0 rename ★★.co ☆☆.tokyo
done

$ ./hoge.sh


「ファイル名」の置換リネーム

 閲覧数:125 投稿日:2018-03-28 更新日:2018-03-30 

例1


「/var/www/hoge」ディレクトリ以下にある「hoge.com」を含むファイル名の「hoge.com」を「piyo.net」へ置換する

前提条件
・1つのファイル名に「hoge.com」は2つ以上含まれることは決してない

find /var/www/hoge -type f -name "*hoge.com*" -print0 | xargs -0 rename hoge.com piyo.net



「ファイル内容」の全文置換

 閲覧数:129 投稿日:2018-03-28 更新日:2019-05-16 

例1


カレントディレクトリ以下の全ファイル内容を全文置換
grep -rl 置換前文字列 . | xargs sed -i 's/置換前文字列/置換後文字列/g'

カレントディレクトリ以下にある全ファイル内容の'e1blue.net'を'e1blue.co'へ全文置換
# grep -rl e1blue.net . | xargs sed -i 's/e1blue\.net/e1blue.co/g'

例2


「/var/www/hoge」ディレクトリ以下にある「ファイル内容」の「hoge.com」を「piyo.net」へ全文置換する
find /var/www/hoge -type f -print0 | xargs -0 sed -i 's/hoge\.com/piyo\.net/g'

「/var/www/☆☆.tokyo」ディレクトリ以下にある「ファイル内容」の「★★.co」を「☆☆.tokyo」へ全文置換する
find /var/www/☆☆.tokyo -type f -print0 | xargs -0 sed -i 's/★★\.co/☆☆\.tokyo/g'

例3


「/path」ディレクトリ以下にある「ファイル内容」の「hoge.jp/stackoverflow」を「piyo/hoge.jp」へ全文置換する
・置換文字列に、セパレータとして通常使用する「/」が含まれている
find /path -type f | xargs sed -i 's%hoge\.jp/stackoverflow%piyo/hoge.jp%g'

「/path」ディレクトリ以下にある「ファイル内容」の「hoge.jp/stackoverflow」を「piyo/hoge.jp」へ全文置換する
・置換文字列に、セパレータとして通常使用する「/」が含まれている
$ find /path -type f -exec sed -i 's%hoge\.jp/stackoverflow%piyo/hoge.jp%g' {} +

例4


「/var/www/e1blue.co/sakura.e1blue.co」ディレクトリ以下にある「ファイル内容」の「sakura.e1blue.co/public_html」を「e1blue.co/sakura.e1blue.co」へ全文置換する
・置換文字列に、セパレータとして通常使用する「/」が含まれている
find /var/www/e1blue.co/sakura.e1blue.co -type f -exec sed -i 's%sakura\.e1blue\.co/public_html%e1blue.co/sakura.e1blue.co%g' {} +




find ./ -type f
・カレントディレクトリ以下のファイルを全て標準出力に出す

|
・標準出力に出力したものを次のコマンドへ渡す

xargs
・渡された標準出力を次に書くコマンドの引数として利用する

sed -i "s/before/after/g"
・渡されたファイルの before を after へ置換する


CentOSで、指定ディレクトリ以下の「ディレクトリ名」と「ファイル名」と「ファイル内容」をグレップ置換

置換文字列にセパレータである「/」も含まれている例
CentOSで複数ファイル内文字列の一括置換をしたいのですが、うまくいきません…


ディレクトリ内を再帰的に全置換する時の選択肢


ディレクトリの中を再帰的に全置換するには
$ find . -type f -name '*.php' -exec sed -i 's/a\.php/b\.php/g' {} + で何を置換したかを表示するには?



sed

sedコマンド使用例



類似度ページランキング
順位 ページタイトル抜粋
1 CentOSで、指定ディレクトリ以下の「ファイル内容」を全文置換 64
2 CentOSで「指定ディレクトリ下層に複数存在する指定ディレクトリ」内にある全ファイルを削除するシェルスクリプト 40
3 指定ディレクトリ内の「特定拡張子のファイル」のみ削除 / find の -delete オプションを使用 32
4 カレントディレクトリ配下の「指定拡張子ファイル」内に「指定文字列」が含まれているものを検索する 32
5 CentOS7 で設定ファイルのチェック後、Nginx起動 32
6 パスの最後のディレクトリ名・ファイル名を抽出 28
7 CentOS7再起動時に、/run 直下に作成したディレクトリを削除しないようにする 26
8 指定IPアドレス以外からのアクセスは、.htaccessでサイト内のメンテナンスページへ誘導 25
9 PHP5をインストールしているCentOSで、PHP7も使用したい 24
10 ファイル拡張子などで条件を絞って全置換するためには、「grep」ではなく「find」を使用 24
11 PHP実行ユーザ設定(デフォルト挙動) / CentOS7 / Nginx 24
12 Xdebugインストール / CentOS 6 23
13 「CentOS7」で「cron」を新規設定する 23
14 CentOS7 / Nginx / PHP / MySQL 各種設定ファイルの場所 23
15 CentOSのyumリポジトリ 23
16 PHP7.1 インストール失敗 / CentOS 6 22
17 「CentOS 7」へ「ChromeDriver 79.0.3945.36」を新規インストール 21
18 「/」以下を、index.htmで表示 21
19 「CentOS 7」へ「Google Chrome 76.0.3809.132」を新規インストール 21
20 CentOS7コマンドは「/usr/bin/」もしくは「/usr/sbin/」内に格納されているファイルを実行している 21
2021/9/21 10:27 更新
週間人気ページランキング / 9-14 → 9-20
順位 ページタイトル抜粋 アクセス数
1 PHPのmb_send_mail関数でメール送信できない | メール処理システム 29
2 Nginx設定。エラーログレベル | Nginx(Webサーバ) 21
3 Python 3.5 アンインストール / yum remove | Python(プログラミング言語) 11
4 FFmpeg 2.8.15 を yum インストール | ソフトウェアスイート 10
5 PHP実行ユーザ設定 / CentOS6 / Apache | PHP(プログラミング言語) 9
6 PHP Version 7.1.2 php-mecabエクステンション対応 / PHP 7.0.14 からのアップグレード  | MeCab(形態素解析) 8
6 ソースからビルドしたPython 2.7.3 アンインストール失敗 | Python(プログラミング言語) 8
7 touch コマンド / viコマンド。新規ファイル作成時の違い | Linuxコマンド 7
7 さくらVPS0 7
8 9回目-13.MySQL5.7.21設定 | CentOS 7 2週間無料のお試し期間 9回目(さくらVPS) 6
8 「設定ファイルに、暗号化 (blowfish_secret) 用の非公開パスフレーズの設定を必要とするようになりました。」対応 6
9 PHPファイルでchmodエラー | PHP(プログラミング言語) 5
9 設定 2019/1/22 / 一般ユーザがmailコマンドでメール送信 / 管理者がmailコマンドでメール送信 5
10 Postfix | メール処理システム 4
10 CentOSでcpコマンド動作確認するためには、Control + T ではなく、 -v オプションを使用 | cp(Linuxコマンド) 4
10 499 (Request has been forbidden by antivirus) | HTTP(通信プロトコル) 4
10 tar | Linuxコマンド 4
10 Python 3.6 インストール / make altinstall | Python(プログラミング言語) 4
10 「CentOS6」から「CentOS7」への移行 | CentOS 7 (CentOS) 4
10 echo と cat の違い 4
2021/9/21 1:01 更新