カテゴリー「Linux」の2件の投稿

【Linux Tips】 テキストファイルの一括置き換え/ファイル名の一括置き換え

久しぶりの覚書き。

perlを使った1ラインコマンドでのテキストファイルの一括置き換え方法

$ perl -p -w -i.bak -e "s/置換前文字列/置換後文字列/g" ファイル名

さらにfindを組み合わせ複数ファイルを一括処理する方法

以下のどちらでもOK。実は他にも色々と方法はある。

$ find . -name ファイル名パターン | xargs perl -p -w -i.bak -e "s/置換前文字列/置換後文字列/g"
$ find . -name ファイル名パターン -exec perl -p -w -i.bak -e "s/置換前文字列/置換後文字列/g" {} \;

もちろんperlの強力な正規表現が使えます。

ファイル名の一括置き換え方法

大量のファイルの拡張子を一気に変更とか、色々できまする。
通常は rename コマンドを使えば良いのだけど、CygwinとかMinGWではrenameが無いっぽい。
よって、シェルスクリプトと組み合わせて以下のようにすると良い。

$ find . -name ファイル名パターン | while read file; do mv $line `echo $file | sed -e 's/置換前文字列/置換後文字列/'`; done

う〜む、Linuxコマンドラインの世界は奥が深いですなぁ。think


続きを読む "【Linux Tips】 テキストファイルの一括置き換え/ファイル名の一括置き換え"

| | コメント (0) | トラックバック (0)

【Linux】 findコマンド

プログラム作ったり、写真を管理したりすると特定のディレクトリ以下について大量のファイル操作する事は結構あるわけです。
例えば・・・

  • 拡張子がbakのファイルを全て削除する
  • ファイル名にtestを含むファイルの数を数える
  • 拡張子jpgを全てpngに変更する(そんな事ないと思うけどcoldsweats01
  • ディレクトリの一覧を表示する
  • .svnディレクトリ以外のファイルについて文字コードをUTF-8に変更する

等など。
実は、これ全部 find とその他のコマンドの組み合わせで実現できます。findは特定ディレクトリ以下の条件に当てはまるファイルやディレクトリを検索するコマンドです。めっちゃ便利やから良く使うねんけど。

基本的な使い方

find ディレクトリ
    指定ディレクトリ以下の全てのファイルとディレクトリを表示する
find ディレクトリ -type タイプ
    指定ディレクトリ以下の全てのタイプで指定したファイルorディレクトリを表示する
find ディレクトリ -name 名前
    指定ディレクトリ以下の全ての名前のファイルorディレクトリを表示する
find ディレクトリ -exec コマンド {} \;
    指定ディレクトリ以下の全てのファイルを引数にしてコマンドを実行する

凝った使い方

find . -name \.svn -type d -prune -or -type f -print
    カレントディレクトリ以下の.svnディレクトリ以外のディレクトリに含まれる全ファイルを表示する
find . -name \.svn -type d -exec rm -Rf {} \;
    カレントディレクトリ以下の全ての.svnディレクトリを削除する
    SubversionでチェックアウトしたディレクトリからSubversionの管理情報を削除する時に便利

findと組み合わせると便利なコマンド

grep
    ファイル内の文字列探索(-rコマンドでもできるけど、findの方が高度な検索が可能)
wc
    ファイルの情報を表示(行数とか単語数とか)
file
    ファイルの情報(キャラクタコードとか)を表示
mv/cp/rm
    ファイルのコピーやら移動やら削除やら
nkf
    ファイルの文字コードを変更
perl/sed
    ファイルの内容置き換え

かなり応用可能なコマンドですなぁ。

| | コメント (0) | トラックバック (0)