- ベストアンサー
ディレクトリ構造の表示
atom_seedの回答
仕上がりの構造を分かりやすくしてみました。 my $dom = { '/path' => '.' }; my @dir = ($dom); while ( my $dir = shift @dir ) { opendir( DIR, $dir->{'/path'} ); my @path = split( '/', $dir->{'/path'} ); my $current_dir = pop @path; my $parent_dir = pop @path; while ( my $path = readdir(DIR) ) { next if ( $path =~ /^\.\.?$/ ); my $full_path = "$dir->{'/path'}/$path"; $dir->{$current_dir} ||= []; if ( -d $full_path ) { push( @dir, { '/path' => $full_path } ); push( @{ $dir->{$current_dir} }, $dir[-1] ); } else { push( @{ $dir->{$current_dir} }, { 'file_name' => $path, 'full_path' => $full_path, 'current_dir' => $current_dir, 'parent_dir' => $parent_dir, } ); } } delete $dir->{'/path'}; closedir DIR; } # 動作確認(モジュールがないときはインストールしてください) use Data::Dumper; print Data::Dumper->new( [$dom] )->Indent(1)->Sortkeys(1)->Dump; exit;
関連するQ&A
- サブディレクトリ名、フォルダ構造のみをテキスト出力したい
ディレクトリ以下のサブフォルダ、 階層5階層ぐらいまでですが、それらを全て テキストに出力、もしくはテキストにコピペしたいです。 ファイルをコピーしなくて、ディレクトリをコピーしなくて、ディレクトリ「名」のみクリップボードか、TXTに記録できるものを探しています。 できればフルパスでの場合と、フルパスじゃなくフォルダ名のみをコピーできる場合、分けてできるソフトがベストです。 サブフォルダも分析してくれるというのをとにかく探しています。フォルダの「構造」には特に拘っていません、フルパスでそれは十分なんですが・・ よろしくお願いします。
- ベストアンサー
- フリーウェア・フリーソフト
- ファイルアップローダ+複数のディレクトリを削除するシステムについて
以下のようなフォルダ構成で、複数のディレクトリを削除するシステムを構築しよと しましたが、1ディレクトリのみしか削除できませんでした。 20090601 - xxx1.txt yyy1.txt zzz1.txt のフォルダ20090601と、ファイルxxx1.txt,yyy1.txt,zzz1.txt のみしか削除できませんでした。理想は、すべてのディレクトリ、ファイルを削除しようと、試行錯誤 しましたが、なかなかうまくいきません。 わかる人がいたら、ご教授のほどよろしくお願いします。 ============フォルダ構成==================================== 20090601 - xxx1.txt yyy1.txt zzz1.txt 20090602 - xxx2.txt yyy2.txt zzz2.txt 20090603 - xxx3.txt yyy3.txt zzz3.txt 20090604 - xxx4.txt yyy4.txt zzz4.txt $_WK_dir_name[1] = "20090601" $_WK_dir_name[2] = "20090602" $_WK_dir_name[3] = "20090603" $_WK_dir_name[4] = "20090604" ============プログラム====================================== // ファイルアップロード処理 (省略) // ディレクトリ数のカウント処理 (省略) // ディレクトリとディレクトリの中身を削除 for ($i = 1; $i < 4; $i++) { // 削除するディレクトリパスを設定 $_dir_path = './' . $_WK_dir_name[$i] . '/'; printf("★1"); // ディレクトリ・ハンドルをオープン $res_file = opendir( $_dir_path ); printf("★2"); // ディレクトリ内のファイル名を1つずつを取得 while( $file_name = readdir( $res_file ) ){ // ファイルかどうか判定する if (is_file($_dir_path . $file_name)) { unlink($_dir_path . $file_name); } } printf("★3"); closedir( $res_file ); printf("★4"); rewinddir( $res_file ); printf("★5"); // ディレクトリの中身が空になったところで、ディレクトリを削除する。 rmdir($_WK_dir_name[$i]); printf("★6"); } ============================================================
- ベストアンサー
- PHP
- batファイルの相対パス
batファイルの相対パス あるバッチが相対パスであるファイルを参照しています このバッチファイルを直接起動すれば、正しく参照できますが、 別のディレクトリにいる別のバッチファイルからcallされた場合、 呼び出し先の相対パスではなく、 呼び出し元の相対パスになってしまいファイルを参照できません。 この問題をスマートに解決する方法はありませんか? 例のchild.batからはfile.txtを参照できますが、 parent_1.bat経由の場合、ファイルが見つかりませんとなります。 child.bat の中で、「cd c:\dir_a」を書いて基点を変更すればとりあえずは行けそうですが、可能な限り絶対パスのベタ書きは避けたいです。 宜しくお願いします。 【例】 c:\ | +-dir_a | | | +-child.bat | | | +-file.txt | +-dir_b | | | +-parent_1.bat | +-dir_c | +-parent_2.bat ===== file.txt ===== test-test-test ===== file.txt ===== ===== child.bat ===== type ./file.txt pause ===== child.bat ===== ===== parent_1.bat ===== call c:\dir_a\child.bat ===== parent_1.bat =====
- ベストアンサー
- その他(プログラミング・開発)
- PHPでディレクトリーとそのサブディレクトリー表示
PHPでディレクトリーとそのサブディレクトリーの中のファイルを表示して、ファイルであればダウンロード用のリンクを付け加えたいと思いますが、ここで嵌ってしまっています。 以下はソースコード(コメントアウトされている部分は試したコード、すべてだめだった) $dir = $_SERVER['DOCUMENT_ROOT'].'/projects/website/uploaded'.'/'.$_GET['user']; function getDirContents($dir) { global $basedir; $path=pathinfo($dir); $path1=$basedir.'/'.basename($dir); //echo $path1; //$path1=basename($dir); if (is_dir($dir)) { //$path1 .= basename($dir); //$path1 .='/'.basename($dir); $dirs = explode('/', $dir); $last_dir = $dirs[count($dirs) - 1]; echo '<strong>'.$last_dir.'</strong>'; if ($dh = opendir($dir)) { echo '<ul>'; while (($file = readdir($dh)) !== false) { if ($file == '.' || $file == '..' || substr($file,0,1)=='.') {} else { echo '<li>'; if (is_dir($dir.'/'.$file)) { $path1 .='/'.basename($file); getDirContents($dir.'/'.$file); } else { //echo $path1; $path2=pathinfo($path1); echo '<a href="'.$basedir.$path1.'/'.$file.'">'.$file.'</a>'; } echo '</li>'; } } echo '</ul>'; closedir($dh); } } return false; } getDirContents($dir); 因みにウェブサイトは、サーバーの/projects/website/にあります。表示したいフォルダはprojects/website/uploaded/にあります。そしてサブフォルだは/projects/website/uploaded/(ユーザ名)/(フォーム番号)/ わかる方がいらっしゃいましたら、ご回答を宜しくお願いいたします。
- ベストアンサー
- PHP
- ディレクトリ構造の表示
ご存じでしたら教えてください。 Perlと連携して、リモートマシーンのディレクトリ構造&ファイルを表示して選択をしたいのですが GUIの部分を何かでできないかと思っています。 タイプミスの可能性や操作性が悪いので、ファイルの絶対パスの入力は避けたいのです。 こういったことを実現するには、どうすればいいのでしょうか。以前、インターネット上でJavaのアプレットを見かけたのですが、どこを探しても見つかりませんでした。 何かフリーソフトで実現できたり、実際に作ったことがあるかたはアドバイスをしていただけないでしょうか。よろしくお願いします。
- ベストアンサー
- Perl
- ディレクトリツリーの表示
Perlでtreeコマンドのような指定したディレクトリ以下の ディレクトリツリーを表示(取得)するモジュールなどはないでしょうか。 CPANから探してみたのですが英語の上に実行サンプルが載って いなかったりと該当するものかどうかの判断ができません。 名前や説明から該当しそうな(?)Perlモジュール ・Dir::Which ・File::CheckTree ・File:Find ・File::Path ・File::Searcher ・Tree::File など 因みに、環境非依存にしたいのでexecやバッククオートを使用したりは できません。
- ベストアンサー
- Perl
- 【ZIP】unixサーバーでディレクトリを保ちZIP圧縮する場合
サーバー上でディレクトリ構造を保ったままZIP処理を行なう方法について勉強しています。 下記のような2つのファイルがサーバー上にあるとき /usr/home/xxx/html/base/dir1/file1.txt /usr/home/xxx/html/base/dir2/file2.txt 以下の処理をかけると、 zip -r /usr/home/xxx/html/data.zip /usr/home/xxx/html/base data.zip 内に「usr」を先頭にしたディレクトリ構造が生成されます。 しかしこれでは意味のない多重入れ子となり具合がよくありません。 何とか「usr」ではなく「base」が先頭になるよう指定はできないものでしょうか? 具体的にはdata.zip内に、以下が生成されてほしいわけです。 base/dir1/file1.txt base/dir2/file2.txt 方法をご存じの方、よろしくお願いいたします。 <環境> レンタルサーバー FreeBSD 6.2 操作はPHP5経由
- ベストアンサー
- BSD系OS
- 【Linux】findコマンドの表示順
linuxのfindコマンドについて質問です。 例えば、あるディレクトリの構成が以下の通りだったとします。 /dir1/aaa.txt /dir1/zzz.txt /dir1/dir2/bbb.txt このとき、 find *.txt | sort を行うと /dir1/aaa.txt /dir1/dir2/bbb.txt /dir1/zzz.txt という順に表示されます。 (文字としてはソートされていますが、ディレクトリ構造としては滅茶苦茶です。) しかし、ファイル名を表示する際は通常はディレクトリ毎に表示したいため、 1つ目の例の順のように表示される必要があります。 このとき、どのようにすればfindによる検索結果を1つ目のようにディレクトリ順に表示できるのでしょうか。 実際はディレクトリ構成が複雑で、ファイルもディレクトリも非常に多くあります。
- 締切済み
- Linux系OS
- perl ディレクトリ ツリー表示
下記ソースコードでカレントディレクトリのツリー表示ができますが、これを特定のディレクトリ内をツリー表示できるようにする方法がわかりません。 opendir関数の$dirの前にtestをつけましたが、うまく行きません。 特定のディレクトリは任意で変えることができることとします。 sub treelist_ { my ($dir, $lv) = @_; opendir my $dh, $dir; my @files = grep { $_ !~ /^\.\.?$/; } readdir $dh; closedir $dh; for my $file (@files) { print ">" x $lv, "$dir/$file\n"; treelist_("$dir/$file", $lv+1) if -d "$dir/$file"; } } sub tree { for my $dir (@_) { print "$dir\n"; treelist_($dir, 0); } } tree('.');
- 締切済み
- Perl
- androidでのディレクトリ作成
androidアプリケーションを作成しています。 先月からjavaを始めた初心者なのですが、 下記のコードでディレクトリ作成ができませんでした。 java.ioはandroidでサポートされているようなので、 何が原因で動作ディレクトリ作成がされないのか わかりません。 わかる方よろしくお願いします。 private String DirPath = "/data/data/MEMO"; //作成したいディレクトリのパス File dir = new File(DirPath); dir.mkdir();
- ベストアンサー
- その他(プログラミング・開発)
お礼
返信ありがとうございました。 動作確認いたしたました。私より数段上の実力の方とお見受けいたしました。ありがとうございます。 初見の書き方もあって正直わからない部分もありますが、この質問をするまでかなり検索で調べたのですが、なかなか糸口がみつからず・・・あきらめかけていました。 書き方の取っ掛かりが見つかりました。これから一個ずつ動作チェックしながら勉強します。ありがとうございました。