• ベストアンサー

ドットを含まないファイルの表示

ドットを含まないファイルをperlで表示したいのですが、 うまくいきません。 シェル上から「ls | grep -v "\."」を実行すれば、 意図した結果は得られています。 しかし、perl上で動作させると、何も表示されません。 #! /usr/bin/perl chdir("/tmp"); open(DIR_IN, "ls -l | grep -v '\.' 2> /dev/null |"); while($file=<DIR_IN>) { print $file; }

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

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

これくらいなら readdir と grep を駆使すればシェルを呼出さなくてもいいよなと思いつつ, 実は \\. にしなきゃならないってオチ?

level30
質問者

お礼

ありがとうございます。 \\.でうまくいきました。

その他の回答 (2)

  • guci-ok
  • ベストアンサー率33% (49/146)
回答No.3

ファイルの一覧取得には「glob」が便利です。 パラメータで条件を与えることができますが、指定は正規表現と 同じではなく、多少注意が必要です。 全部globでやろうとせず、grepと組み合わせるなど、柔軟な対応を。 D:\tmp>dir ドライブ D のボリューム ラベルがありません。 ボリューム シリアル番号は 54A5-8EF0 です D:\tmp のディレクトリ 2005/09/06 23:32 <DIR> . 2005/09/06 23:32 <DIR> .. 2004/02/07 15:19 35,189 G1.txt 2005/09/06 23:31 35,189 G1__txt 2004/02/07 15:14 35,189 G20050906.txt 2004/02/07 15:13 156 G20050906_txt 4 個のファイル 105,723 バイト 2 個のディレクトリ 18,754,117,632 バイトの空き領域 D:\tmp>cd \ D:\>perl -le "map { print } grep { ! /\./ } glob '/tmp/*'" /tmp/G1__txt /tmp/G20050906_txt D:\>

  • ttyp03
  • ベストアンサー率28% (277/960)
回答No.2

リダイレクション( 2> /dev/null )っているんでしたっけ?

level30
質問者

お礼

つけても、つけなくても結果は同じでした。