¡Ú ÇÏÀ§ µð·ºÅ丮±îÁö ¸ðµÎ °Ë»öÇϱâ

2002³â 3¿ù 28ÀÏ ÀüÁ¾ÇÊ  
µð·ºÅ丮¸¦ Àд ¹æ¹ý¿¡´Â opendir, readdir, closedir¸¦ °°ÀÌ ÀÌ¿ëÇÏ´Â ¹æ¹ý°ú, glob ÇÔ¼ö¸¦ ÀÌ¿ëÇÏ´Â ¹æ¹ý µÎ °¡Áö°¡ ÀÖ½À´Ï´Ù.
±×·¯³ª, ±× µð·ºÅ丮ÀÇ ÇÏÀ§ µð·ºÅ丮±îÁö ¸ðµÎ ã¾Æ¼­ ÀÐÀ¸·Á¸é, ±× ÇÔ¼ö ¿Ü¿¡µµ Á» ´õ º¹ÀâÇÑ ³í¸®¸¦ ÷°¡ÇØ¾ß ÇÕ´Ï´Ù. ¿¹¸¦ µé¸é ´ÙÀ½°ú °°Àº ¹æ¹ýÀÌ ÀÖÀ» °ÍÀÔ´Ï´Ù.
my $dir = '.'; # ¶Ç´Â @ARGV·Î ¹ÞµçÁö...

my @dirs = ( $dir );
while( $dir = shift @dirs ) {
	my @paths = glob("$dir/*");
	foreach my $f (@paths) {
		if( -d $f ) {
			push @dirs, $f;
		}
		else {
			# ¹º°¡ ÇÕ´Ï´Ù.
			print "File : $f\n";
		}
	}
}
À§ ¿¹Á¦°¡ ÀÌÇØ°¡ °¡Áö ¾Ê´õ¶óµµ ½Å°æ¾²Áö ¸¶½Ê½Ã¿À. Áö±Ý ¼³¸íÇϰíÀÚ ÇÏ´Â °ÍÀº À§ ¿¹Á¦°¡ ¾Æ´Õ´Ï´Ù. ¹°·Ð, À§Ã³·³ ÇØµµ µÇÁö¸¸, ±»ÀÌ ÀÏÀ» º¹ÀâÇÏ°Ô ÇÒ ÇÊ¿ä´Â ¾ø½À´Ï´Ù. ½Ç¿ëÀûÀ¸·Î ÇØ¾ßÁö¿ä. File::Find ¸ðµâÀ» »ç¿ëÇÏ¸é °£´ÜÇÏ°Ô ÇØ°áµË´Ï´Ù.
use File::Find;
my $dir = '.'; # ¶Ç´Â @ARGV·Î ¹ÞµçÁö...

find(\&print_if_file, $dir);

sub print_if_file {
	if( -f $_ ) {
		print "File : $File::Find::name\n";
	}
}
°á°ú´Â °°Áö¸¸ ÈξÀ °£°áÇÕ´Ï´Ù. File::Find ¸ðµâÀ» »ç¿ë(use)Çϰí, ±× ¸ðµâ¿¡¼­ Á¤ÀÇµÈ find ÇÔ¼ö¸¦ È£ÃâÇϸ鼭 ù¹øÂ° Àμö·Î °¢ ÆÄÀÏȤÀº µð·ºÅ丮¸¦ ó¸®ÇÒ ¼­ºê·çƾÀÇ ¸®ÆÛ·±½º¸¦ ³Ö¾îÁÖ°í, ±× µÚ·Î Àüü Æ®¸®¸¦ °Ë»öÇÒ µð·ºÅ丮µéÀ» ³ª¿­ÇÕ´Ï´Ù. ±×·¯¸é find ÇÔ¼ö´Â ¸ðµç µð·ºÅ丮µéÀ» ÇÏÀ§ µð·ºÅ丮±îÁö ã¾Æ °¡¸é¼­ °¢ ÆÄÀÏ È¤Àº µð·ºÅ丮 Çϳª¸¦ ãÀ» ¶§ ¸¶´Ù Àμö·Î ¹Þ¾Ò´ø ¼­ºê·çƾÀ» È£ÃâÇϸ鼭 $_ º¯¼ö¿¡ ÆÄÀÏ È¤Àº µð·ºÅ丮 À̸§À» ÀúÀåÇÕ´Ï´Ù. ÀÌ ¶§, $File::Find::dir´Â ±× ÆÄÀÏ È¤Àº µð·ºÅ丮°¡ Á¸ÀçÇÏ´Â µð·ºÅ丮À̰í, $File::Find::nameÀº ÇØ´ç ÆÄÀÏ/µð·ºÅ丮ÀÇ °æ·Î¸¦ ³ªÅ¸³À´Ï´Ù. ("$File::Find::dir/$_"´Â "$File::Find::name"°ú °°Àº °ªÀ» °®½À´Ï´Ù.)
ÀÌ·¸°Ô Àüü °æ·Î¸¦ °Ë»öÇϸé, ±× ¸ñÀûÀÌ ºÒÇÊ¿äÇÑ ÆÄÀÏÀ» Áö¿ì´Â °ÍÀ̵ç, ƯÁ¤ÇÑ ÆÄÀϵéÀ» ¼öÁ¤Çϱâ À§ÇÑ °ÍÀ̵ç, ¼Õ½±°í °£°áÇÏ°Ô ÀÏÀ» ó¸®ÇÒ ¼ö ÀÖÀ» °ÍÀÔ´Ï´Ù.

[¸ñ·ÏÀ¸·Î °¡±â]