2006年05月20日
ファイル一括操作
このエントリはTonさんのblog「クマーなひとときw」の2006年05月19日 シェルスクリプトというエントリに触発されて書きました。
unix系os(Linuxなど)で作業していると、多数のファイルの一括操作が必要な場合が多い。
一括操作の例としては、文字コード変換や水平TAB展開などがある。
この様な場合、簡単なシェルスクリプトを書いて、さらに find(1) と xargs(1) を組み合わせると、人間様は楽をする事が出来る。
具体的な例を書いてみます。
命題:あるディレクトリ配下の全てのファイルを、EUC-JP/LFに変換し、水平TABを4スペースに展開する。ただし、アクセス権とタイムスタンプはもとのままにする。
unix系os(Linuxなど)で作業していると、多数のファイルの一括操作が必要な場合が多い。
一括操作の例としては、文字コード変換や水平TAB展開などがある。
この様な場合、簡単なシェルスクリプトを書いて、さらに find(1) と xargs(1) を組み合わせると、人間様は楽をする事が出来る。
具体的な例を書いてみます。
命題:あるディレクトリ配下の全てのファイルを、EUC-JP/LFに変換し、水平TABを4スペースに展開する。ただし、アクセス権とタイムスタンプはもとのままにする。
作業:
1.以下の内容をファイル(例: /tmp/hoge.sh) に保存する。
2.上のファイルに実行権を与える
3.対象ディレクトリにcdする
4.以下のコマンドを実行する
以上。
以下の考え方がわかれば、いろいろと応用が利きます。
find(1) は、ファイル一覧などを標準出力に変換する
xargs(1) は、標準入力をコマンドの引数に変換する
sh(1)は、コマンド間にパイプを作り、出力を入力に繋げる
しかし、アレだな。我ながら、久しぶりに
ITっぽい(プログラマっぽい)事
を書いたなぁ~と…
1.以下の内容をファイル(例: /tmp/hoge.sh) に保存する。
#!/bin/sh
# echo "$# files"
for f in $* ; do
nkf -e -d $f | expand -4 > $f.xx
chmod --reference=$f $f.xx
touch --reference=$f $f.xx
mv $f.xx $f
done
2.上のファイルに実行権を与える
chmod +x /tmp/hoge.sh
3.対象ディレクトリにcdする
4.以下のコマンドを実行する
find . -type f | xargs /tmp/hoge.sh
以上。
以下の考え方がわかれば、いろいろと応用が利きます。
find(1) は、ファイル一覧などを標準出力に変換する
xargs(1) は、標準入力をコマンドの引数に変換する
sh(1)は、コマンド間にパイプを作り、出力を入力に繋げる
しかし、アレだな。我ながら、久しぶりに
ITっぽい(プログラマっぽい)事
を書いたなぁ~と…
Posted by tmr at 17:29
│Comments(2)
│unix
この記事へのコメント
ボクの苦手な分野ですねぇ。
今、仕事でサーバー、データベースなどの仕事がボクにまわってきて・・・四苦八苦しながら勉強しています。
今までしたWebPlanの仕事で、他人任せで自ら勉強してこなかったツケがまわってきているようです。(汗)
正直・・・向き不向きがあるのではないか?と弱音を吐いているボクってヘタレっすね。(苦笑)
今、仕事でサーバー、データベースなどの仕事がボクにまわってきて・・・四苦八苦しながら勉強しています。
今までしたWebPlanの仕事で、他人任せで自ら勉強してこなかったツケがまわってきているようです。(汗)
正直・・・向き不向きがあるのではないか?と弱音を吐いているボクってヘタレっすね。(苦笑)
Posted by
ぴざ
at 2006年05月22日 02:54
得手、不得手によって、チームで分担しましょう。
サーバ、データベース関連のお勉強、応援してますネ
サーバ、データベース関連のお勉強、応援してますネ
Posted by
tmr
at 2006年05月22日 12:23
※このブログではブログの持ち主が承認した後、コメントが反映される設定です。