「Linux/shell/ファイルの数だけ処理を繰り返すサンプル(csh tcsh)」の編集履歴(バックアップ)一覧はこちら

Linux/shell/ファイルの数だけ処理を繰り返すサンプル(csh tcsh)」(2013/11/02 (土) 23:02:43) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

ファイルの数だけ処理を繰り返すサンプル(csh tcsh)です。 繰り返し+正規表現でファイルを絞り込むサンプルは[[こちら>Linux/shell/ファイルの数だけ処理を繰り返すサンプル(csh tcsh)#その2]]です。 * サンプル1 &ref(sample1.sh) #!/bin/csh # ファイル名をlsで取得(ファイル名の昇順)しforeachで回す foreach filename (`ls -1`) # 処理を記述(例:ファイル名をフルパスでecho) echo `pwd`/$filename # endでforeach終了 end * 解説 まず、lsに「-1」オプションをつけると、ファイルが1行に1つずつ表示されます。 $ ls -1 20131031.dat aaa bbb HOGE20131031.dat hogehoge.sh この「ls -1」をforeachコマンドに渡すと、1行ずつファイル名が変数に設定されて繰り返し処理ができます。 foreach 変数名 (`ls -1`) 処理を記述、「$変数名」でファイル名を活用できます。 end フルパスがほしい場合は、今回のサンプルのように「pwd」の結果を結合してもよいですし、「ls /hogehoge/* -1」のようにフルパスに*を付けてもよいです。 * おまけ # ファイル名の降順でソート foreach filename (`ls -1r`) # タイムスタンプの昇順(新しい順)でソート foreach filename (`ls -1t`) # タイムスタンプの降順(古い順)でソート foreach filename (`ls -1tr`) 他にもソートのオプションはいろいろあるので試してみましょう ---- &aname(その2,option=nolink){繰り返し+正規表現でファイルを絞り込むサンプル} * サンプル2 &ref(sample2.sh) #!/bin/csh # ファイル名をlsで取得+grepで絞り込み foreach filename (`ls -1|grep -E '^2[0-9]{3}[01][0-9][0-3][0-9](HOGE|MOGE)\.dat$'`) # 処理を記述(例:ファイル名をフルパスでecho) echo `pwd`/$filename # endでforeach終了 end 変更点 > foreach filename (`ls -1`) > ↓ > foreach filename (`ls -1|grep -E '^2[0-9]{3}[01][0-9][0-3][0-9](HOGE|MOGE)\.dat$'`) 「ls -1」の結果をハイプ「|」で「grep -E」に渡して絞り込むという作りになっています。 「grep」はテキストの検索コマンドで「E」オプションは拡張正規表現を使うという意味です。 ちょっと複雑な正規表現を使う場合は「E」オプションが必要になります。 今回使用した正規表現は「20130101」などの年月日から始まり、「HOGEまたはMOGE」に拡張子がdatで終わるファイル名だけ出力する用になっています。 以下にサンプルの実行結果を示します。 サンプル1の実行結果 > $ ./sample1.sh > /home/hoge/shellsample/01HOGE20131031.dat > /home/hoge/shellsample/20130101HOGE.dat > /home/hoge/shellsample/20130101MOGE.dat > /home/hoge/shellsample/20131031.dat > /home/hoge/shellsample/aaa > /home/hoge/shellsample/bbb > /home/hoge/shellsample/HOGE20131031.dat > /home/hoge/shellsample/hogehoge.sh > /home/hoge/shellsample/MOGE20121031.dat > /home/hoge/shellsample/mogemoge.sh サンプル2の実行結果 > $ ./sample2.sh > /home/hoge/shellsample/HOGE20131031.dat > /home/hoge/shellsample/MOGE20121031.dat
ファイルの数だけ処理を繰り返すサンプル(csh tcsh)です。 繰り返し+正規表現でファイルを絞り込むサンプルは[[こちら>Linux/shell/ファイルの数だけ処理を繰り返すサンプル(csh tcsh)#その2]]です。 * サンプル1 &ref(sample1.sh) #!/bin/csh # ファイル名をlsで取得(ファイル名の昇順)しforeachで回す foreach filename (`ls -1`) # 処理を記述(例:ファイル名をフルパスでecho) echo `pwd`/$filename # endでforeach終了 end * 解説 まず、lsに「-1」オプションをつけると、ファイルが1行に1つずつ表示されます。 $ ls -1 20131031.dat aaa bbb HOGE20131031.dat hogehoge.sh この「ls -1」をforeachコマンドに渡すと、1行ずつファイル名が変数に設定されて繰り返し処理ができます。 foreach 変数名 (`ls -1`) 処理を記述、「$変数名」でファイル名を活用できます。 end ※foreachコマンドはcsh tcshの内部コマンドなので、ch bashではwhileコマンドを使います。whileコマンドを使ったサンプルは[[こちら>Linux/shell/ファイルの数だけ処理を繰り返すサンプル(sh bash)]] フルパスがほしい場合は、今回のサンプルのように「pwd」の結果を結合してもよいですし、「ls /hogehoge/* -1」のようにフルパスに*を付けてもよいです。 * おまけ # ファイル名の降順でソート foreach filename (`ls -1r`) # タイムスタンプの昇順(新しい順)でソート foreach filename (`ls -1t`) # タイムスタンプの降順(古い順)でソート foreach filename (`ls -1tr`) 他にもソートのオプションはいろいろあるので試してみましょう ---- &aname(その2,option=nolink){繰り返し+正規表現でファイルを絞り込むサンプル} * サンプル2 &ref(sample2.sh) #!/bin/csh # ファイル名をlsで取得+grepで絞り込み foreach filename (`ls -1|grep -E '^2[0-9]{3}[01][0-9][0-3][0-9](HOGE|MOGE)\.dat$'`) # 処理を記述(例:ファイル名をフルパスでecho) echo `pwd`/$filename # endでforeach終了 end 変更点 > foreach filename (`ls -1`) > ↓ > foreach filename (`ls -1|grep -E '^2[0-9]{3}[01][0-9][0-3][0-9](HOGE|MOGE)\.dat$'`) 「ls -1」の結果をハイプ「|」で「grep -E」に渡して絞り込むという作りになっています。 「grep」はテキストの検索コマンドで「E」オプションは拡張正規表現を使うという意味です。 ちょっと複雑な正規表現を使う場合は「E」オプションが必要になります。 今回使用した正規表現は「20130101」などの年月日から始まり、「HOGEまたはMOGE」に拡張子がdatで終わるファイル名だけ出力する用になっています。 以下にサンプルの実行結果を示します。 サンプル1の実行結果 > $ ./sample1.sh > /home/hoge/shellsample/01HOGE20131031.dat > /home/hoge/shellsample/20130101HOGE.dat > /home/hoge/shellsample/20130101MOGE.dat > /home/hoge/shellsample/20131031.dat > /home/hoge/shellsample/aaa > /home/hoge/shellsample/bbb > /home/hoge/shellsample/HOGE20131031.dat > /home/hoge/shellsample/hogehoge.sh > /home/hoge/shellsample/MOGE20121031.dat > /home/hoge/shellsample/mogemoge.sh サンプル2の実行結果 > $ ./sample2.sh > /home/hoge/shellsample/HOGE20131031.dat > /home/hoge/shellsample/MOGE20121031.dat

表示オプション

横に並べて表示:
変化行の前後のみ表示: