業務で初めてshellを触ることになりましたが、わからない箇所がいくつかあります。
とあるパスにとある形式のファイルが存在する数だけループを回す
==例==
※形式:sample.yyyymmdd.flg
実ファイル:sample.20180912.flg
実ファイル:sample.20180913.flg
※形式の実ファイルの数だけfor文?while文?どちらでもいいのでとにかく
形式のに合致する実ファイルの数だけループさせたいです。
説明が下手ですみません。
どなたか回答お願いいたします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
ベストアンサー
質問のタイトルとは反しますが、自分がちょっと思いついたものとしては、
shell
1find . -type f -name "sample.*.flg" | grep -e ".*sample.[0-9]\{8\}.flg" | wc -l
はどうでしょう?
解説
find
shell
1find . -type f -name "sample.*.flg"
指定されたディレクトリからファイルやディレクトリを検索するコマンド find
で、まず sample.(なんちゃら).flg
に該当するファイルを抽出します。
| (パイプライン処理)
shell
1|
次にこの縦棒記号ですが、これは「次に書くコマンドに出力結果を渡す」というものです。
シェルスクリプトの「使いこなすと超便利機能」です。
grep
shell
1grep -e ".*sample.[0-9]\{8\}.flg"
こちらは grep
という「文字列検索コマンド」です。
このコマンドのすごいところは、正規表現が使えることです。(他にもありますが)
普段は「指定されたファイル内の文字列を検索する」用途で使われることが多いですが、今回は前のコマンド find
の結果を受け取っているため、そこに書き込まれているファイル一覧から、正規表現を使用し、
「何らかの文字が0個以上繰り返された文字の後に、 sample.
という文字列の後に数字が8つ並び、その後ろで .flg
と書かれている行を取得する」
ということをしています。
そして、この結果をパイプライン処理を使用し、次のコマンドへ結果を受け渡しします。
wc
shell
1wc -l
Word Countの省略の wc
コマンドは、文字の数を数えるコマンドですが、オプションに -l
をつけてあげると、行数をカウントすることができます。
これで「該当する名前のファイル数を数える」という事ができます。
役立つ資料
質問の直接の回答
さて、ここまででシェルスクリプトのお作法が何となくわかったと思うので、for文を使ってみましょう。
shell
1for flg in `find . -type f -name "sample.*.flg" | grep -e ".*sample.[0-9]\{8\}.flg"` 2do 3 printf "%s is flag ;)\n" $flg 4done
と、長くなりましたが、こんな感じでできるはずです。
シェルスクリプト(PowerShellも含む)は、ちょっとマウスでポチポチやりたくない時に重宝しますので、知っておくと役に立ちますよ!
投稿2018/09/12 07:03
編集2018/09/12 07:18総合スコア2244
0
数字8桁を含むと言う事であれば、
sh
1for file in sample.[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9].flg 2do echo $file 3done
です。
正規表現じゃないので、8回書かないといけないけど、正規表現が使えるコマンドと組み合わせるよりは簡単でしょう。
投稿2018/09/12 07:10
総合スコア84538
0
完全に思いつきですいません。処理が何をするかわからないですが
/hoge下にある頭がsampleで末尾flgのファイルを表示するみたいなことであれば
for i in /hoge/sample.*.flg
do
echo ${i}
done
ファイル名が表示されますけども頭がsampleで末尾flgとなっている
ファイル数分だけループしますネ
こんな感じでいいですか?
投稿2018/09/12 06:47
総合スコア13
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/09/12 07:09
2018/09/12 07:26
2018/09/12 07:31
2018/09/12 07:33