ホーム > Uncategorized > [覚書]シェルスクリプトでスペースや空白を含むファイル名を処理したいの対策

[覚書]シェルスクリプトでスペースや空白を含むファイル名を処理したいの対策

ファイル名に空白とか入っているとファイル名のリストが入った引数とかをforで回したときに空白でファイル名が分割されちゃって期待した動きにならないよね。

対策はフィールドセパレータ環境変数を設定するだけの事で具体的にはIFSに改行をセットすれば良い。

なお、IFS(IFS変数)とはInternal Field Separatorであり、安心の標準機能。

下記はカレントフォルダ以下の個々のファイルに対してmd5sumコマンドを実行し、全ての結果をhoge.txtに出力する例。

#!/bin/bash
IFS="
"
for FILE in `find . -type f -print`
do
  md5sum $FILE
done > hoge.txt 

#!/bin/bash
IFS=$'\n'
for FILE in `find . -type f -print`
do
  md5sum $FILE
done > hoge.txt 

#!/bin/bash
IFS=\

for FILE in `find . -type f -print`
do
  md5sum $FILE
done > hoge.txt 

重要なのはIFS変数をセットしている行の記述で\や”の前後のスペースとかタブに気をつけるという事。いうまでもないことだけど、改行だけをセットするように記述しましょう。

互換性の問題なのか知らんけどIFSやFS変数のデフォルト設定値が古く、今時の空白を含んだファイル名に対処できないというのはちと問題な気がするなあ。せっかくのシェル力が勿体ないよ。

広告
  1. まだコメントはありません。
  1. No trackbacks yet.

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。