• ベストアンサー

Perl初心者です。 ls -1 Outputの読み込みはどのように?

FreeBSD 上でディレクトリー内にあるファイル名を変数として読み込みたいのですが。 具体的には ls -1 *.defでアウトプットされるファイル名を@filne_nameに保存したい。 どなたか、教えてください。 よろしくお願いします。

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

  • ベストアンサー
  • ralf124c
  • ベストアンサー率52% (232/446)
回答No.1

一般的な例を示します。 ここから----------------------------------------------- #!/usr/local/bin/perl ## コマンドを定義:パイプ処理のため末尾に「|」を付ける my $CMD = 'ls -1 *.def|'; ## コマンドを実行して配列「@filne_name」に結果を得る open(IN01,$CMD); my @filne_name = <IN01>; close(IN01); ## 確認のため内容を表示 print @filne_name; ここまで----------------------------------------------- ここではPerlウンヌンではなく、OSコマンドのパイプ処理機能を使って自身のプログラムに結果を与える為、コマンドの最後に「|」を付けます。

sjc95134
質問者

お礼

>ralf124cさん どうもありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.4

ファイル名取得の別解です。 組み込み関数 glob を使って @file_name = glob '*.def'; で、ワイルドカードにマッチするファイルのみを@file_nameに 取り出せます(パスをつけた指定も可能です)。 改行もついていませんので取り除く必要もありません。 グロビング演算子(<>) を使って同じことができますが、 この演算子の使用は現在では推奨されていません。

sjc95134
質問者

お礼

ご丁寧にありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
回答No.3

こんにちは。 ただファイル名を取得できればいいのなら、以下の方法もあります。 # *.defがファイル名右端である場合(そうでない場合、正規表現に"$"は不要です) if (opendir(DIR, '/dir_a/dir_b')) { @filne_name = grep { /\.def$/i && -f "$dir/$_" } readdir(DIR); closedir(DIR); } シェルとlsコマンドを起動しない分、負荷が比較的軽いと思います。御質問では「"ls -l *.def"の出力」と指定されていますので該当しないかもしれませんが、御参考までに申し上げました。下記URLにも丁寧に説明されています。

参考URL:
http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/pe_k03.htm
sjc95134
質問者

お礼

ご丁寧にありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
回答No.2

コマンドをバッククォート「`」で囲んで使用すると、 出力結果を取り出せるので、それを加工します。 (下の例は、*.defにマッチするファイルが1個も無い場合を考慮していません) >perl -e '@file_name = split( /\n/, `ls -1 *.def` ) ; print join( "|", @file_name )' 00.def|05.def|svssh.def

sjc95134
質問者

お礼

>shuyamakawaさん どうもありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • aから始まるファイルだけlsしたい。

    packages(FreeBSD)の中から、Apacheを探したいのですが、wwwディレクトリの中はたくさんありすぎて、一度に表示できません。そこで、aから始まるファイルだけをlsコマンドで表示したいのですが、こういう場合、どういったオプションをつけるとよいのでしょうか?なにかいい方法があったら教えてください。

  • コマンドプロントでlsを使えるようにする

    windowsのコマンドプロンプトもlsを使えるように使えるようにしたいのですがうまくできません。 わかる方いらっしゃいましたらどうかよろしくお願いします。 まず、私が行った方法はCドライブの直下に以下のようにbashフォルダを作成しました。(C:\bash) 次にテキストファイルを作成し拡張子を.batにしてbashフォルダ内に作成しました。(ls.bat) 上記バッチファイルの中にコマンド「dir」と書き保存しました。 最後に作成したフォルダにパスを通すために 変数名:Path 変数値:C:\bash を追加しました。 以上の工程でlsが使えるようになると思ったのですが、使えませんでした。 なぜ使えないのかわかる方教えてください。

  • lsでのファイル名・パスのフルパス取得

    環境:Solaris10 lsコマンドでディレクトリ、ファイル名の一覧を取得しようとしています。 条件としては 1.対象は全てのディレクトリ・ファイル(ls -R) 2.実行結果はアクセス権・所有者の情報も含む(ls -lの結果のような) 3.ディレクトリ・ファイル名ともにフルパスで表示 この上記3点を満たそうとして、 ls -dlR / と実行してみましたが、この場合Rスイッチが有効になりませんでした。 OS標準コマンドでこの3点を満たすことは出来るのでしょうか?

  • UNIXでfindとls

    UNIXでファイルを検索するのにfindコマンドを使用してますが 情報として、パス名だけが表示されます。 >find . -name ghi -print ./ghi ./abc/def/ghi ./abc/def/ghi/ghi これを、ファイルのいろんな情報を見ることはできないでしょうか? パイプを使おうと思ったのですが、いまいちわかってなくて できませんでした。

  • ls * で表示可能なファイル数はいくつ?

    lsコマンドでディレクトリのファイルをリスト化するのに ls *ではファイル数が多すぎてエラーになります。 lsコマンドで表示可能なファイル数はいくつでしょうか。

  • Unix:ls-lRのリダイレクト

    kshで、ls-lRのコマンドを使い表示したディレクトリの内容を、新規のディレクトリ内のファイルに下記のようにリダイレクトさせようとしましたが、ファイル作成できませんでした。 ls-lR >>$HOME/test/apple cat | ls-lR >> $HOME/test/apple どうすれば、ls-lRの内容をファイルに表示できますか?

  • コマンドプロンプトで「ls」が認識されません!

    検索しても回答が得られなかったので、質問させていただきます。 環境変数をいじったあとで、 アクセサリ→コマンドプロンプトで起動はできますが、「ls」と入力しても 「lsは、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。」 と出てきて、lsコマンドが使えません。 環境変数をいじる前は、できていました。 「cd」,「dir」のコマンドは使用可能です。 システム環境変数で 変数名 ComSpec 変数値 %SystemRoot%\system32\cmd.exe はあります。 OSはXPです。 何が原因か分からないので、どなたか分かる方がいましたら、ご回答お願いします。

  • ターミナルのls コマンドについて

    macbook OS X 10.5.6 を使っています. PC初心者です. Terminal で,あるディレクトリの中身を調べる時に,サブディレクトリの中身まで含めて全て表示させるためにはどうすればよいのでしょうか. 例えば,ディレクトリAの中に「テキストファイルB,ディレクトリC」があり,さらに,ディレクトリCの中に「テキストファイルD」があるとします. このとき,ls コマンドでディレクトリA の内容を表示させようとすると, テキストファイルB とディレクトリC が表示され,ディレクトリCの中身(ここではテキストファイルD)までは表示されません. 私はディレクトリCの中身まで含めて一括で表示させたいのですが,その方法が分かりません. このようなやり方をご存じの方がいらっしゃったら,お教え下さい. 何かやり方があるならば,ls コマンドにこだわる必要は全くありません.

    • ベストアンサー
    • Mac
  • ls であるファイル以外を表示したい

    RH7.3です。 あるディレクトリ配下に多数のファイルがそんざいするのですが、 そのディレクトリで「ls」をしたときに"access_log"というファイル以外を表示させたいです。  ls [!a]* でやったのですが、access_logの他に access_log.1などがありそれも含まれてしまいます。 何かいい方法はないでしょうか? できれば、ls コマンドひとつで処理したいと思っています。(正規表現で対応?)

  • コマンド ls について

    linux初心者です。 調べたのですが、出てこなかったので知っている方がいらっしゃったら。 linux コマンドで ls というものがあると思いますが、オプションで -la をつけた際に表示される "." ".." の2つのディレクトリ??はいったい何を意味している(というより何?)のでしょうか。 パーミッションも付与されているみたいなので、ファイルかディレクトかなのでしょうか? ls で検索しても出てこなかったので(manも読みましたがそれらしいものはなかったので)、ちょっと無知な感じですがご回答よろしくお願いいたします。

Turbo Debuggerの場所はどこですか?
このQ&Aのポイント
  • Turbo Debuggerはどこにありますか?今年で56歳になるシステムエンジニアが、Borland C++ 5.5.1 の開発環境を約20年ぶりに構築しようとしていますが、フリーの Turbo Debugger を見つけることができません。
  • 最新の Visual Studio は重くて個人が趣味でプログラムを作るにはオーバースペックのように感じています。また、約20年前に Borland C++ 5.5.1 で趣味でプログラムを作っていたため、慣れている Borland C++ 5.5.1 を使いたいと考えています。
  • Turbo Debugger のダウンロードができない問題があるようですが、現在の最新の情報はありません。分かる方がいらっしゃれば、教えていただけると助かります。
回答を見る