• ベストアンサー

grepでファイル名を取得したい。

いま以下の構成になっています。 カレントディレクトリの(ディレクトリを除く)ファイル名を取得し,list.txtに出力する作業をやってます。 そういうオプションがあれば良いのですがなかなか見つかりません。知恵をお貸しください。 list -F |& grep (???) > list.txt -Fでディレクトリの最後に/がつくので,(???)の部分でそれらのファイルを除く,とする方針…?と思ったのですが,うまいやり方が見つかりません。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • qaaq
  • ベストアンサー率36% (146/404)
回答No.3

#2 のqaaqです。 grepで処理したいのですね。 ls -F1 | grep -v '/$' で如何でしょう。 ls のオプションが -F だけでは、1行に複数のファイル名が含まれてしまうので、 オプション"1"をつけて1行1ファイルになるようにします。 grepでは、”行末の/”を対象外"-v"にすればいいのです。

x_crimson
質問者

お礼

素早くて的確な回答ありがとうございます。 方針は大体あっていたんですね。ですがまだ慣れません。勉強です。 ありがとうございました。

その他の回答 (2)

  • qaaq
  • ベストアンサー率36% (146/404)
回答No.2

OSが不明なので確定かもしれませんが、 find コマンドの -type オプションで出来ませんか? FreeBSDだと、 % find . -type f で出来ます。 後は、 -maxdepth オプションで対称にするディレクトリ階層を制限すればいいと思います。

  • yasuya
  • ベストアンサー率16% (35/216)
回答No.1

ファイル名って拡張子付いてますよね? ディレクトリ名に「.」が付いてなければ >ls -l *.* | awk '{print $9}' > list.txt で良いと思います。

x_crimson
質問者

補足

早速の回答をありがとうございます。参考になります! grepを使った良い方法はありますでしょうか。 それと補足ですが,一行目は消し忘れですので気にしないでください。

関連するQ&A

  • 連続で複数の単語をGREPしたい

    Windows7端末でサクラエディタを用いてGrepしていますが、Grepしたい単語数が多いので困っています。イメージとしては以下のようにできれば良いと考えています。 ・検索したい単語のリスト C:\単語リスト.txt ・結果を出力するファイル C:\結果テキスト.txt(結果ファイルは単語ごとに出力しても可能) ・検索対象フォルダ(サブフォルダも検索) C:\SourceCode\ 単語リストから一行ずつ取得して検索対象フォルダから該当のファイル名と該当行を結果テキスト.txtに出力します。結果は一つのファイルにまとめて出す場合は、単語ごとにGrepした結果を分けて出力したいです。 もしくは単語単位に複数の結果テキスト.txtを出力しても構いません。 方法ご存知のかた教えて頂ければ幸いです。

  • 複数存在するgrepについて

    自分はSolaris7(8)を使用しているのですが、grepが /bin/grep /usr/bin/grep /usr/xpg4/bin/grep の3つ存在しています。動作的には前者2つが同じようで、最後者がちょっと拡張されているように思われます。思うに大きな違いは"-f|-e"(ファイルにマッチすべき文字列を書いておくことが出来る)が大きいと思うのですが、そこで、 1) /xpg4 というdirectoryはどのような意味合いを持っているのでしょうか?どのような括りでこのディレクトリがあるのでしょうか? 2) 上に書いたオプションの違いのほかに、両者にはどのような違いが有るのでしょうか? 3) 通常、UNIXのユーザーは/usr/bin/grepがデフォルトで使っているというのが「正しい」と思うのですが、後者(xpg4)がデフォルトとして使われる場合にはどのようなケースがあるのでしょうか? --[参考]-- /usr/bin/grep [ -bchilnsvw ] limited-regular-expression [filename ... ] /usr/xpg4/bin/grep [-E | -F ] [-c | -l | -q ] [ -bhinsvwx ] -e pattern_list ... [ -f pattern_file ... ] [ file ... ] ---------- 宜しくお願いいたします。

  • ファイルから検索条件を読み込んでGREPを実行したい

    INPUTファイルを以下のように作成します。 >input.txt aaa bbb ccc ・ ・ ・ 特定のディレクトリの複数ファイルに対して grepを順にaaa,bbb,ccc・・・ というようにinput.txtから読み込んで実行し、結果をそれぞれaaa.txt,bbb.txt,ccc.txt・・・ へ出力したいのですが、方法がわからなくて困っています。 どなたかご教授お願いいたします。

    • ベストアンサー
    • Perl
  • grepコマンドの使い方

    下記のようなファイルがあるとします。 カレントディレクトリ /home から"hello"という文字列が含まれるテキストを grepしたい場合、コマンドはどのようにすればいいのでしょうか? 色々な方法があると思いますが、よろしくお願いします。 ---------------------------------------------------------------------- /home/hoge1/foo1.txt foo2.exe foo3.txt /home/hoge2/hogehoge2/foo4.txt foo5.exe /home/hoge3/hogehogehoge3/foo6.txt foo7.exe foo8.zip ----------------------------------------------------------------------

  • ファイル名が記入されたファイルを読み込んでcdする

    ファイル名が記入されたファイルを読み込んでカレントディレクトリを変更するにはどうしたら良いでしょうか?   具体的に申し上げると、    カレントディレクトリに filepass.txt というファイルが存在し、 中身には、例えば、 C:\Software と書かれています。   MATLABで、 filepass.txtを読み込み、 中に書かれている、 ディレクトリ名に、   カレントディレクトリを変更する(cd) にはどうしたらよいでしょうか?

  • ファイル名に『?』が入ってるファイルを開くには?

    ファイル名に半角の『?』が入ってるファイルには アクセスできないでしょうか? opendir(DIR, "./dir"); @list = grep(!/^\./, readdir(DIR)); close(DIR); ディレクトリにあるファイルのリストを取得して、 そのリストに基づいて処理をしたいのですが… ファイル名に『?』が入ってるファイルは、 open(); rename(); ファイル演算子等の処理できません。 これをなんとかする方法はあるのでしょうか?

    • ベストアンサー
    • Perl
  • SJISファイルを日本語でgrep

    UNIX環境で、 SJISファイルを日本語でgrepしたのですが、 ファイル名が出力されずにうまくいきません。 どなたかご教授願えないでしょうか。 [自分のコマンド] find ./ -type f -print | xargs nkf -e | grep 'テスト' とし、日本語は検地できたのですが、 ファイル名が出力されずに困っております。 grep -l としたら、↓のエラーが表示されました。 xargs: nkf: シグナル 13 によって終了しました サブディレクトリも含めて検地したいのですが、 なにかいい方法ありますでしょうか。

  • grep,cutで取得した文字の前後へ追記

    お世話になります。 ログファイルを集計し、SQL化するバッチファイルを作っている者です。 下記で取得した各文字列に対し、 cat $file_name | grep $target | cut -d ' ' -f 5 >> hogera.txt 下記のように前後に文字列を追加し、SQL化したいと思っています。 (出力結果1, 'test'), (出力結果2, 'test'), (出力結果3, 'test'), ですが、実装方法が不明な状況で困っています。 ご教授頂けませんでしょうか。

  • grepの書き方がわかりません。

    Perlの初心者なんですが、以下のようなテーマをもらってプログラムを作っています。  第一引数にディレクトリのパス、第二引数に検索し たいファイル名を指定して第一引数の  パス以下にある全てのディレクトリを検索してファイルがあればそのパスを表示させなさい。 一応できたのですがプログラムの記述の一部がよくわかりません。以下のプログラムは一部です。 local ($dir, $file) = @_; opendir(DIR,$dir) or die @data = readdir(DIR);#ディレクトリの内容を読む closedir(DIR);#ディレクトリを閉じる local @fname = grep {-f "$dir/$_"} @data; local @dname = grep {-d "$dir/$_"} @data; $dir,$fileには第一、第二引数の文字列をいれているのですがそのディレクトリになかにファイル、ディレクトリがないか検索するためgrepを使っています。それで"$dir/$_"の部分の意味がよくわかりません。 この部分は他のサイトであったものを流用しただけなのですがよくわからないまま使ってたまたま動いたから使用しててこのままでは理解していないままなので どうか教えてほしいです。 あともう一点ありましてgrepのところで最初自分で書いた時  local @fname = grep (-f,@data); というように書きました。ファイルが第一引数にあるときは問題なく動作するのですがその下にあるディレクトリにあるとなぜかプログラムが終わりません。 デバッグとして@dataの中身を表示したらそのディレクトリの検索をしてはいるんですが、その中に目当てのファイルがあるはずなのに@dataの中身がからっぽで ファイルがないことになっています。この違いがどうしてもわかりません。  以上の二点がわからないんですがどうかお手数ですがどなたか教えてください。  

    • ベストアンサー
    • Perl
  • grepの使い方

    "A.lst"と"B.lst"の2つのファイルがあります。 ともにディレクトリ階層の一覧が記述されています。 2つのファイルを比較して、A.lstのディレクトリ階層の文字列を 含む行を、B.lstから抽出して、リダイレクトで出力するには、 どういうコマンド操作になるのでしょうか。 特定の文字列ならば単純に、cat B.lst | grep moziretsu > sample.lst でいいわけですが、この文字列がA.lstファイル内に複数行あり、 それを順にgrepするにはどうすればいいのかがわかりません。 シェルもただいま勉強中です。 よろしくご教授願います。