Net::FTPを使いフォルダ一覧を取得する方法

このQ&Aのポイント
  • Net::FTPを使用してフォルダ一覧を取得する方法について説明します。
  • ルート直下ではなく特定のフォルダ内の一覧を取得するためには、$ftp->cwd('/フォルダ名')を使用します。
  • ただし、$ftp->cwd('/フォルダ名')を追加しても一覧が取得できない場合がありますので、他の方法を試してみてください。
回答を見る
  • ベストアンサー

Net::FTPを使いフォルダ一覧を取得したいと思い以下の参考サイトを

Net::FTPを使いフォルダ一覧を取得したいと思い以下の参考サイトを発見しました。 http://dqn.sakusakutto.jp/2008/06/perl_netftpftp.html 非常に分かりやすく早速スクリプトを使用して作成しましたがこのスクリプトですと「/」ルート直下の一覧で取得されてしまいます。 (ここから) use Net::FTP; my $ftp = Net::FTP->new("hoge.sav.ne.jpp", Debug => 0 , Passive => "true"); # 接続 $ftp->login("xxxx", "pass"); # ログイン my @dir = $ftp->cwd('/public_html'); my @dir = grep /^d/, $ftp->dir; # ← フォルダ一覧をdirコマンドで取得 my @dir_names_full = @dir[2..$#dir]; #  自フォルダと親フォルダ("."と"..")を除く。 my @dir_names_short = map { (split)[8] } @dir_names_full; # フォルダ名のみを取得 $ftp->quit; (ここまで) $ftp->cwd('/public_html');を追加したのですが、 drwxrwx--- 2 xxxx xxxxx 48 Sep 3 14:59 Maildir drwx---r-x 2 xxxx xxxxx48 Sep 3 14:59 log drwx---r-x 1019 xxxx xxxxx 40584 Dec 28 00:25 public_html となってしまいます。 $ftp->dir;  を $ftp->dir('/public_html'); としてもみましたがうまくいきませんでした。 すみません。ご指導を賜りたく書き込みました。 よろしくお願いいたします。

  • Perl
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • t-okura
  • ベストアンサー率75% (253/335)
回答No.1

/public_html ディレクトリがないのでは。 > my @dir = $ftp->cwd('/public_html'); の部分を $ftp->cwd("/public_html") or die "Cannot change working directory ", $ftp->message; に変えるとどうなりますか。また、 $ftp->cwd("public_html") or die "Cannot change working directory ", $ftp->message; ではどうでしょうか。

hihin2003
質問者

お礼

t-okuraさん ありがとうございます!! $ftp->cwd("/public_html") or die "Cannot change working directory ", $ftp->message; でなんら問題なくいけました。 public_htmlの部分は、変数で対処しているのですが、上記の内容に変更したらすんなり取得できました。 ありがとうございます。 これで作業が進められます。

関連するQ&A

  • Net::FTPを使いファイル一覧のみを取得したい

    Net::FTPを使いファイル一覧のみを取得したい 以前の質問では大変お世話になりました。 「Net::FTPを使いフォルダ一覧を取得」 http://okwave.jp/qa/q5555220.html 今度は、Net::FTPを使いファイル一覧のみを取得したいと思ってます。 (ここから) use Net::FTP; my $ftp = Net::FTP->new("hoge.sav.ne.jpp", Debug => 0 , Passive => "true"); # 接続 $ftp->login("xxxx", "pass"); # ログイン my @dir = $ftp->cwd('/public_html'); my @dir = grep /^d/, $ftp->dir; # ← フォルダ一覧をdirコマンドで取得 my @dir_names_full = @dir[2..$#dir]; #  自フォルダと親フォルダ("."と"..")を除く。 my @dir_names_short = map { (split)[8] } @dir_names_full; # フォルダ名のみを取得 $ftp->quit; print "$_<br>\n" for @dir_names_full; (ここまで) my @dir = grep /^d/, $ftp->dir; # ← フォルダ一覧をdirコマンドで取得 の部分の「grep /^d/,」を削除したら、ファイルも一緒に表示させることは出来たのですが 正しく表示されませんでした。 (ここから) drwxrwx--- 2 xxxx xxxxx 48 Sep 3 14:59 Maildir drwx---r-x 2 xxxx xxxxx48 Sep 3 14:59 log -rw-r--r-- 1 xxxxnobody 2932 Oct 21 09:34 ent4.html -rw-r--r-- 1 xxxx nobody 2933 Oct 21 09:34 ent5.html -rw-r--r-- 1 xxxx nobody 2878 Oct 21 09:34 index.html (ここまで) 最終的な結果は (ここから) -rw-r--r-- 1 xxxx nobody 2932 Oct 21 09:34 ent1.html -rw-r--r-- 1 xxxx nobody 2932 Oct 21 09:34 ent2.html -rw-r--r-- 1 xxxx nobody 2933 Oct 21 09:34 ent3.html -rw-r--r-- 1 xxxx nobody 2932 Oct 21 09:34 ent4.html -rw-r--r-- 1 xxxx nobody 2933 Oct 21 09:34 ent5.html -rw-r--r-- 1 xxxx nobody 2878 Oct 21 09:34 index.html (ここまで) で表示させたいのです。 検索をしていたら、grepで出来そうなのかと思いやってみましたがうまくいきませんでした。 お手数かけます。 よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • FTPサーバーから受信したファイル一覧からファイル名だけを取得したいです

    こんばんは。いつもお世話になっております。 VB.NET+WinXPなのですが、 FTPサーバーにログインして、 LISTコマンドでファイル一覧を要求すると 「drwxrwxr-x 2 53 53 4096 Feb 28 2006 abc」 などというファイルやフォルダの一覧がかえって来ると思うのですが、 この中からファイル名やフォルダ名だけを取得するには どうしたらよいでしょうか。 TABやコンマが入っていないので、文字列関数で切り取るにも 区切りがわからないと思うのです。 ローカルドライブのDir関数なら、FileAttribute.Nomalや.Directoryの指定でファイル名だけや ディレクトリー名だけを指定して 取得することが出来るのですが、FTPサーバーの場合からの場合はどういった方法があるでしょうか。 参考程度でも構いませんので教えて頂けるとたすかります。m(__)m

  • FTPで一覧リストを作成し取得(Get)したい

    VBで、FTPサーバに接続し、指定のディレクトリーからいくつかのファイルをダウンロードしています。ダウンロードするファイル数が沢山あり、出来る事なら、そのディレクトリー内のファイル名の一覧リストがほしいのです。DOSコマンドから見るときは、'ls'や'dir'は使えるのですが、一覧の作成ができません。DOSプロンプトからFTPサーバをOPENし、dir > aaa.txt と入力すると自端末のC:\document and Settings\自分のフォルダー配下に、そのaaa.txt は作られるのですが、中身が入ってきません。ファイルの一覧がほしいとき、VBではどのようにコーディングすればいいのでしょうか。教えていただければ本当に助かります。よろしくお願いいたします。

  • ftpコマンドで再帰的にフォルダとファイルを見たい

    コマンドプロンプトのftpコマンドを使用して、あるディレクトリ配下にあるフォルダとファイル一覧を再帰的に見たいです。 「コマンド:dir」では、ディレクトリ配下のフォルダ一覧は見れるのですが、フォルダの下にあるファイルまでは見ることができません。 どなたかご教授頂けるとうれしいです。 よろしくお願いします。

  • perlのNet::FTPで、ファイルかディレクトリか調べたい

    現在、Perlでリモートバックアップする簡単なスクリプトを 書いています。 そのためにNet::FTPモジュールを使っているのですが、 use Net::FTP; $ftp = Net::FTP->new($hostname); $ftp->login($user,$pass); $mydirs = $ftp->ls($backupdir); のようにlsメソッドでファイル一覧を取得した後で、 各ファイルがファイルなのか、ディレクトリなのか 調べたいと思っています。しかしC言語のstat関数の ようなメソッドはNet::FTPにはなさそうです。 どうすれば調べられるか、アドバイスいただけないでしょうか?

    • ベストアンサー
    • Perl
  • プロキシ経由でNet::FTPを利用する方法

    Net::FTPを利用してサーバ内にあるファイル一覧を取得しようとしています。 use Net::FTP $ftp = Net::FTP->new($hostname); $ftp->login($user,$pass); $file = $ftp->ls($holdr); $ftp->quit; とすれば同一ネットワーク内のファイル一覧は取得できました。ですがこのネットワークはプロキシサーバ内にあるためこのプログラムでは外のホストには接続できませんでした。どうすればプロキシを経由して外のホストに接続することができるでしょうか?

    • ベストアンサー
    • Perl
  • ExcelVBAでサブフォルダ名などを取得したい

     ExcelVBAで、Dドライブ内の特定のフォルダ(D:\My Documents等)の中にある全てのフォルダ名やファイル名を取得したいのですが、方法が分かりません。  Dドライブのすぐ下にあるフォルダはDirで取得できるようなのですが、サブフォルダ名が取得できないのです。  具体的にどのように書いたらよいかお教えいただけるとうれしいです。  よろしくお願いします。

  • クラスパス配下のファイル名一覧取得

    ある、クラスパスの通ったフォルダ(仮にdir)があったとして そのフォルダ内にあるファイル名一覧を取得したいと考えております。 dir/ ->a.txt ->b.txt ->c.txt 結果:a.txt、b.txt、c.txt ClassLoader クラスなどを用いて取得しようと考えたのですが、 getSystemResource() メソッドなどはファイル名まで指定しないと 取得できないみたいで、現時点で望む処理ができない状態です。 フォルダまでの絶対パスの指定はしたくないため、 Fileクラスも使用できない状態です。 このような処理をやったことがある方は、 どうかご教授お願いいたします。

  • VBA フォルダ内のファイル名一覧

    下のようなコードですが、Dir("C:\見積\*.xls")の部分を このコードを書いてあるブックのあるフォルダの名前をもっと簡単に取得してコードにできないでしょうか。 もうひとつ付け加えたいこともあります。ファイル名一覧にする際、このブックと「XXX.xls」という名前のブック名以外の一覧にしたいのですが、これもお手上げですので、あわせてお願いします。 Sub test() Dim myFile As String Dim fl As Integer myFile = Dir("C:\見積\*.xls") fl = 9 Do While myFile <> "" fl = fl + 1 Cells(fl, 3).Value = myFile myFile = Dir() Loop End sub

  • 【FTP】ファイル一覧の取得を中止しました. ファイル一覧の取得に失敗しました.

    FTPでファイル一覧の取得ができません。 どこをなおせばよいでしょうか? 以下vsftpの設定とFFFTPのエラー内容です。 vsftp---- [m@m ~]# cat /etc/vsftpd/vsftpd.conf | grep -v ^# | grep -v ^$ anonymous_enable=NO local_enable=YES write_enable=YES local_umask=022 dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES xferlog_file=/var/log/vsftpd.log xferlog_std_format=NO ascii_upload_enable=YES ascii_download_enable=YES ftpd_banner=Welcome to blah FTP service. ls_recurse_enable=YES listen=YES pasv_enable=YES pam_service_name=vsftpd userlist_enable=YES tcp_wrappers=YES use_localtime=YES pasv_address=m.sample.jp use_localtime=YES pasv_addr_resolve=YES pasv_min_port=60000 pasv_max_port=60050 force_local_logins_ssl=NO force_local_data_ssl=NO listen=YES FFFTP---- ホスト m.sample.jp を探しています. ホスト m.sample.jp (xxx.xxx.x.xx (21)) に接続しています. 接続しました. 220 Welcome to blah FTP service. >USER user1 331 Please specify the password. >PASS [xxxxxx] 530 Login incorrect. >USER user1 331 Please specify the password. >PASS [xxxxxx] 230 Login successful. >>CD C:\Documents and Settings\a\デスクトップ >CWD / 250 Directory successfully changed. >XPWD 257 "/" >TYPE A 200 Switching to ASCII mode. >PASV 227 Entering Passive Mode (127,0,0,1,234,145) ダウンロードのためにホスト 127.0.0.1 (60049) に接続しています. 接続できません. ファイル一覧の取得を中止しました. ファイル一覧の取得に失敗しました.

専門家に質問してみよう