質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Q&A

解決済

4回答

2912閲覧

特定の文字を含むファイルを抽出する

growthposition

総合スコア98

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

0グッド

0クリップ

投稿2016/08/25 14:14

現在、特定のファイル配下にあるファイルの中でredirect::responseという記載があるファイルを抽出したいと考えております。

その際に
色々調べた結果、下記を試してみたのですが、
明らかに違うファイルも出力されてしまいます。

find . -name "*" -print | xargs grep redirect::response

※違うファイル
img配下の画像など

こちらどこが間違っておりますでしょうか
また、別の方法などもございましたらご教示頂けますと幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TaichiYanagiya

2016/08/25 16:11

grep -rl 'redirect::response' ./ ではダメ?
guest

回答4

0

ファイル名を出力

bash

1#!/bin/sh 2 3for ff in $(find . -type f) 4do 5 grep -q 'redirect::response' $ff && echo $ff 6done

一行でもできますよね。
find . -type f -exec grep -l 'redirect::response' {} ;

投稿2016/08/25 23:29

編集2016/08/26 00:06
A.Ichi

総合スコア4070

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

目的に対してコマンドは間違っていません。

明らかに違うファイルも出力されてしまいます。

ということですが、「明らかに違う」というのはどうやって判断しましたか?

投稿2016/08/25 15:37

otn

総合スコア84542

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

growthposition

2016/08/26 03:30

>「明らかに違う」 →すいません。 こちらimgファイルまで抜き出して来ておりました。
otn

2016/08/26 06:56

> こちらimgファイルまで抜き出して来ておりました。 それは質問文に書いてあるので分かるのですが、それが文字列にヒットしたファイルじゃなくて、関係ないファイルだということをどうやって判断しましたか?
guest

0

簡単にやるなら以下のコマンドで

find . -type f -exec grep 'redirect::response' {} /dev/null \;

慎重にやるなら以下のスクリプトで

#!/bin/sh find . -type f -exec file {} \; | \ grep 'ASCII' | \ awk 'BEGIN{FS=":"}{print $1}' | \ while read f do echo $f grep 'redirect::response' $f done

--- 追加 ---

// なんかマイナスになってるんですけど、うまく意図が伝わらなかったのかなあ
// ってことで、(解決済になったので)補足を…

まず find コマンドに関しては、"-type f" を指定することで
ファイルのみを対象とします。(ディレクトリを除外)
"-exec " で対象ファイルを引数にしてコマンドを実行します。
で、"{}" が対象ファイルになります。
また、";" は -exec を指定する時の定石ってことで。

grep コマンドの特徴として、ファイルを1つ指定した場合は
ファイル名はでませんが、複数指定された場合はでます。
簡単な例の方ではこれを利用しています。つまり /dev/null を
指定することにより、常に複数ファイル指定の形とする、
結果的にヒットしたファイル名が必ず出力される、と。
(-print を付けない場合の挙動が分からなかったのでこの形にしました)

file コマンドは、指定ファイルの素性を解析するものですね。
"ASCII" で絞り込むことによってテキストファイルのみを抽出します。

awk で fileコマンドの出力からファイル名のみを切り出し、
echo でファイル名を表示し、grep で検索しています。
今から考えると、こちらも /dev/null を与える形にして
echo を省いた方がよかったかなって気もしますね。
いまさらですが。

投稿2016/08/25 14:36

編集2016/08/29 10:29
takasima20

総合スコア7458

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

find . -name "*"でのべつくまなくファイルを対象としています。そのため、思わぬファイルも対象となっています。
何か対象とするファイルを絞り込めるものはないのでしょうか(例えば、ファイル名なら一定の拡張子であるとか)?それに合わせてオプションを指定していきましょう。

投稿2016/08/25 14:22

archiver

総合スコア1557

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

growthposition

2016/08/25 14:33

ご回答ありがとうございます。 拡張子を揃えてみます!
退会済みユーザー

退会済みユーザー

2016/08/26 00:15

揃える必要がありませんよ。 ! -name "*.png" ! -name "*.gif" ! -name "*.jpg" のように除外したい拡張子を列挙すればいいのです
growthposition

2016/08/26 03:29

ご丁寧にありがとうございます。 ご教示頂きました通りに一度やってみます! ありがとうございます。
archiver

2016/08/29 14:31

回答らしい回答ではなかったのに、恐縮です。それだけでは何なので、もう一つ除外系のやり方を。 質問文を読み返してみたところ、画像系のファイルはディレクトリにまとまっているんですかね。もし、そのディレクトリが画像系のファイルだけでしたら、-pruneオプションを使って、そのディレクトリを探索の対象から除外するということもできます。使い方は -type d -name <ディレクトリ名> -prune です。 findコマンドはいろいろなファイル検索ができて、それぞれに応じたオプションが用意されていますが、オプションの数も豊富なので、使いこなすのには大変だったりします。しかし、それに見合った見返りがあると思うので、manページを見るなりで、徐々にマスターしていってください。
退会済みユーザー

退会済みユーザー

2016/08/29 14:46

まあ実は Linux の場合 `grep -rlI redirect::response .`だけですむらしいというオチがあったり
archiver

2016/08/29 15:01

確かに、ありますね。 でも、私の場合、何故か`grep -r`がまともに動いた試しがないんですよね、Linux環境で(どのディストリビューションか忘れましたけど)。`grep -r`って、環境によって動く動かないってあったりしますかね? (なので、私は専ら、findで探してgrepに繋ぐやり方にしてます)
退会済みユーザー

退会済みユーザー

2016/08/29 15:04

環境によってはRだったりする。 また 順序が固定じゃないとだめな FreeBSDとかもある
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問