2011-12-20 7 views
-6

Perlを使って配列に格納されているすべてのディレクトリとサブディレクトリのリストが必要です。例えばディレクトリとサブディレクトリをpathの配列に列挙する。

$array[0] = '/home'; 
$array[1] = '/home/ali'; 
$array[2] = '/home/perl'; 
$array[3] = '/home/stackoverflow'; 
$array[4] = '/home/ali/desktop'; 
$array[5] = '/home/ali/sub'; 
$array[6] = '/home/stackoverflow/new'; 
+0

を、あなたのプログラムはそれ自身のためにそれをフェレットする?これとは対照的に、 'ls'を使ってコンパイルされた入力ファイルから情報を取得します。 –

+0

'ls'を使って配列に列挙できますか? – thi

+0

'ls'、あなたがLinuxのマシンであれば、現在の作業ディレクトリにあるファイルとサブディレクトリが一覧表示されます。サブディレクトリだけが必要な場合は 'home /'にcdし、bash端末で 'find home/-type d'を実行すると、'/home'を含むすべてのサブディレクトリのリストが出力されます。これをあなたのプログラムに入力ファイルとして入力するか(単純なもの)、あるいはコマンドを実行するためにプログラムを入手して、おそらくbashスクリプトを呼び出すようにします。これらのコマンドはUnixシステム上でのみ実行されます。 –

答えて

6
use File::Find::Rule; 
my @array = File::Find::Rule->directory->in('/home'); 

File::Find::Rule

+6

同じような無症状の欠陥を持たない代替案を提案するには、表示された方法を使用できない理由を教えてください。 – tadmc

1
my @array = ('/home', grep -d, glob '/home/*'); 
+4

これは要求どおりに繰り返されず、名前が始まるディレクトリをスキップします'.'で – ikegami

0

あなたはそれを昔ながらの方法行うことができます。ディレクトリとそのサブディレクトリのリストを

File::Find::find(sub { 
     say $File::Find::name if -d $File::Find::name 
    }, @array 
    ); 
関連する問題