• ベストアンサー

perl上からfindを使い検索した結果を、変数に挿入したい

perl上からfindを使い検索した結果を、変数に挿入したい perlからsystemを使い、Linuxのfindコマンドでファイルを検索した際に、 system 'find / abcde-*.tar.gz'; で検索はできるのですが、 結果の値(検索した後最後に出るファイル名の事です)を変数に入れたいのです。 どなたか教えていただけないでしょうか? 尚、検索範囲(全体)の中に該当のファイルは1つしか常に存在しないようになっています

  • Perl
  • 回答数2
  • ありがとう数20

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

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

> find / abcde-*.tar.gz おかしくないですか? これって、/(ルート)以下の全てと、カレントディレクトリにある"abcde-*.tar.gz"が対象になります。 /以下の "abcde-*.tar.gz"という名前を探すなら find / -name "abcde-*.tar.gz" だと思うんですが。 それとも、私の知らない独自のfindなのでしょうか。 > ・・・・・ってfind: /lost+found: Permission denied > と出てしまいますな・・・・・・・ 特権ユーザーで実行していなければ、実行時のユーザーの権限ではアクセスできないファイルやディレクトリがあります。 そういったものに当っただけです。/から全検索すれば、当り前に発生します。 そういうファイルやディレクトリが対象外になるだけで、そのまま検索は続きます。 このメッセージは標準エラー出力に出力されるので、qxや`やパイプラインからの入力には入ってきません。(明示的に取り込まないかぎり) 別解として、findコマンドを使わずに、File::Findモジュールを使う、というのがあります

その他の回答 (1)

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

`command` なり qx(command) なり open FILEHANDLE, '-|', 'command' なり, お好きな物をどうぞ.

marariya
質問者

お礼

お答えいただきありがとうございます qx /find \/ abcde-*.tar.gz/; を実行すると、出力された結果が取得できる、といった事でよろしいのでしょうか この場合、perlでその値を得るにはどうすればいいのでしょうか?_ print $_; 等で出力できるのでしょうか

marariya
質問者

補足

・・・・・ってfind: /lost+found: Permission denied と出てしまいますな・・・・・・・ system 'find / abcde-*.tar.gz' では正しく取れるのですが。

関連するQ&A

  • findの検索結果をtar cvfで固めたい

    findでの検索結果をtar cvfで固めたいと考えてますが リダイレクト等の順番が分かりません。

  • Perl変数から外部プログラムの標準入力へ

    Perlのプログラム内部で保持している変数の値をシェルコマンドに与える方法はありますか? $value=12345; や、 @array=('ONE', 'TWO', 'THREE'); などの変数の値を外部コマンド(標準入力を受けることができるコマンド)に渡したいのです。 方法がわからないので、現在は一度ファイルに書き出して、 system('cat file.name | command'); のようにして渡しています。なんか賢くない書き方のような気がするのですが。

    • ベストアンサー
    • Perl
  • Linuxでの検索はfindですか。

    教えてください。Linux初心者です。 どのディレクトリにあるのかわからない、名前も一部しかわからない、ファイルを検索するときのコマンドはなんでしょう。 manを調べるとfindかと思うんですが、すべてのディレクトリについて調べるとか、名前のワイルドカードの指定の仕方がわからないんです。 よろしくお願いします。

  • find での検索について

    find での検索について 以下のような繰り返しの処理を作成しました。 (実際のコードよりかなり簡略化して書いています) for 1 to *** a = sheets(1).cells.find(what:=ABC) next a = sheets(1).cells.find(what:=ABC) 常に変化する変数"ABC"を元に他のブックに検索をかけ、データをコピーしてくる 処理をしています。 つまずいているところは繰り返し中の検索は正常に処理出来ているが nextを抜けた後の検索がうまくいかない点です。 具体的には他のブックに検索したい値(変数"ABC")があるのに検索できないというものです。 自分なりに以下のような切り分けを行いました。 1,nextを抜けた後の変数"ABC"の値が他のブックに存在しない変数を取得しているのではないか? と思い直前で変数"ABC"を表示させてみたが正常 2,"ABC"の値に空白や,大文字、小文字等があり検索出来ないのではないか? と思い調べてみたが正常 3,引き数LookInですべてのパターンを試したがうまくいかなかった。 途方に暮れて、手動で検索を行ってみました。 1,エラーで途中で止まってから他のブックをCtrl+Fで検索(マクロの実行途中で止まっているため、検索しようとしていた値、変数"ABC"がすでに検索する文字列(N):に入力されている)するが対象が見つからない。 2,検索しようとしていた値(他のブックに入力されている値)を直接コピーして検索をかけたところ 正常に検索できた 3,おかしいなと思いCtrl+Fで"検索する文字列(N):"をプルダウンメニューをみてみると全く同じ値がありました。試しになんどか交互に手動検索をかけてみましたが変数"ABC"から取得した方では検索できません。 検索しようとしていた値(他のブックに入力されている値)を直接コピーしたほうから検索出来ます。 どちらの値も違いはないように見えます。 どなたかこのような現象に心あたりがあるかたはいらっしゃいますでしょうか?

  • FINDコマンドについて

    あるディレクトリでファイルの中に『abcde』という文字を含むファイルをさがしたいのですが、 FINDコマンドはどのように指定すればよいでしょうか?

  • VBA Find

    困りました、、 Findを使って検索しようとしていて、 検索する値に変数を使っているのですが (変数は文字列) 検索するものがたくさんあり、 ひとつの項目ごとにFindを書くのがとても面倒です 調べてみても数字を増やしていく方法しか見つからず どうすればいいのか分からなくなりました^^; どうにかひとつのFindで10個ほどある項目を順番に検索していく方法が ありましたらお願いします(__)

  • Rubyにおける変数

    Windows2000上で、Rubyを動かしています。 皆様のお陰で、少しずつ進んでおります。しかし、また質問させてください。 変数に、ファイル名を代入して、実行すると、動かなくなりました。 実名を入れた、system('tar zxf test_20070511.tar.gz')では、動きますが、 変数にした、system('tar zxf myFilename')では、動きません。 Rubyスクリプト ---------------------- print Dir.getwd,"\n" Dir.chdir('C:\myData\myData2') print Dir.getwd,"\n" dir = Dir.open('C:\myData\myData2') while myFilename=dir.read do if /.tar.gz/i =~myFilename then puts myFilename system('tar zxf myFilename') end end dir.close ------------------------------------ 宜しくお願いいたします。

  • linux シェルの変数、引数の指定について教えて

    シェルの勉強を始めまして、 ファイルを複合化、解凍するだけのシェルを作ろうと思っています。 fukugo.sh $1 でシェルを実行 /home/allday/log/upload/201701261507(←ログの作られる時間で変わります)aaaaa.tar.gz.e というファイルを$1引数に指定 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー !/bin/sh # # init CWD=$(cd $(dirname $0) && pwd) #cd ${CWD} # if [ -z $1 ] then echo "引数を指定してください" exit fi echo "Start" echo "指定されたtarファイルを複合化します" fukugo-decrypt $1 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー fukugo-decryptは私の会社で使われているtarを複合化するコマンドです(環境変数?) 複合化すると /home/allday/log/upload/201701261507aaaaa.tar.gz というファイルになります。 このできたファイルをシェルに入れる次のコマンドの引数にしたいです。 が最後の.eが無くなるため$1では指定できないと思います。 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー echo "複合化されたファイルを/tmpフォルダに入れておきます" mv /home/allday/log/upload/201701261507aaaaa.tar.gz /tmp/ echo "ファイルを展開します" tar zxvf /tmp/201701261507aaaaa.tar.gz echo "End" ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー 複合化された後の/home/allday/log/upload/201701261507aaaaa.tar.gzや 移動後の/tmp/201701261507aaaaa.tar.gzは変数で設定するとよいと聞いたのですが、 どのように設定すればよいかわかりません。 お分かりになる方、お願いします。 教えてください。

  • PostgresSQLにPerlをインストールしようとすると′競合'していますというエラーが。。。

    始めて投稿させていただきます。 新しい会社に入社したら何故かPostgresSQLにPerlを使えるようにすることになりました。コンピュターとは今まで無縁でしたので、基本的なことを聞くことになるかもしれませんが、よろしければ教えてください!! Linux ベースのSQLにPerlをインストールしようとすると、 ファイル /usr/share/man/mann/while.n.gz (パッケージ tcl-8.3.5-88 から)は、パッケージ tcl-8.4.6-0vl1からのファイルと競合しています。 というメッセージが連なって出て行きます。 なるほど パッケージtcl-8.4.6-0vl1 からのファイルを消せばいいのかなと find / -name tcl-8.4* コマンドをうつと、 そのようなデクトリやファイルはありません とかえってきます。それならばと locate tcl-8.4* コマンドで探しますが、doc しか見付かりません! どうすればいいのか、何か良い案があれば教えていただきたいです。 突然で申し訳ないですが、よろしくお願いいたします。

  • 解凍の仕方

    Linuxのレッドハット7.2を使っているのですが, ネットスケープ7.1をDLしたのですが, ファイル(gzで終っている)を解凍しようと思ったのですが, tarというコマンドを使ったのですが,うまく行かず manコマンドで使い方をみたのですが, 書式の読み方がよくわかりません。ファイル名は netscape-i686-pc-linux-gnu-installer.tar.gz というファイルです どうやった解凍できますでしょうか? 現在使っているネットスケープのバージョンは4.78です. お願いします。

専門家に質問してみよう