function getDirectorys($dir)
{
if ($handle = opendir($dir)) {
$dirsArr = array();
$linksArr = array();
$filesArr = array();
while (false !== ($entry = readdir($handle))) {
if ($entry != "." && $entry != "..") {
if (is_dir($entry)) {
$dirsArr[] = $entry;
} else if (is_link($entry)) {
$linksArr[] = $entry;
} else {
$filesArr[] = $entry;
}
}
}
writeFileList($filesArr, $linksArr);
foreach($dirsArr as $nextDir) {
getDirectorys($nextDir);
}
closedir($handle);
}
}
function writeFileList($filesArr, $linksArr)
{
print_r($filesArr);
print_r($linksArr);
}
getDirectorys('.');
お言葉に甘えて、コメント欄からやってきました。
ファイルの一覧をテキスト成形するようなイメージの php スクリプトだということで、
php には -r でコードを指定して、標準入力にファイル一覧を流し込むようにしてみました。
#! /usr/bin/sh # 基準のディレクトリ BASE_DIR=... # 一覧ファイルのファイル名 LIST_FILE=list.txt list_file () { ls | while read f do if [ ! -d $f ] then echo $f fi done } list_directory () { ls | while read f do if [ -d $f ] then echo $f fi done } make_list () { cd $1 # ファイル list_file | php -r ' // STDIN からファイル一覧を読み込んで加工するコード ' > ${LIST_FILE} # ディレクトリ list_directory | php -r ' // STDIN からディレクトリ一覧を読み込んで加工するコード ' >> ${LIST_FILE} # ↑追加書き込み cd ${BASE_DIR} } dirs=`find ${BASE_DIR} -type d -print` for d in ${dirs} do if [ ! -r ${d}/${LIST_FILE} ] then make_list ${d} fi done
ファイルとディレクトリを分けて一覧にする辺りは、シェルスクリプトの方が冗長ですね ><
加工の内容によっては、ls -l の出力を加工した方が良いのかな、
ls -l | php -r '...'
とか、ファイル一覧とディレクトリ一覧の加工方法が同じだったら、php の処理をサブルーチンにした方が良いのかな、
edit_list () { php -r '...' } list_file | edit_list > ${LIST_FILE} list_directory | edit_list >> ${LIST_FILE}
とか、いろいろ考えちゃいます。