2020/04/05(日)mplayer用のPlayListを生成する

2020/11/03 11:32
Perl で書きました。Linux 等向けの mplayer に読ませるために、カレントディレクトリ以下の音楽ファイル(.mp3/.wma)があるディレクトリに、プレイリストを生成していきます。
「ディレクトリを再帰的にたどりファイル一覧を取得したい その1 - Perl - とあるエンジニアの闇歴史帳」(http://tech.katsubemakito.net/perl/dir_recursion1) を参考にさせていただきました。

音楽ファイルは文字コード順で並び替えられるのが前提(例: 00_zzz.mp3 , 01_yyy.mp4 , ...)です。

ソースはこちら。
#!/usr/bin/perl

use strict;
 
#-- 再帰実行 --#
reflexiveFile('.');

exit;



sub reflexiveFile{
	my $dir = shift;
	my @list = ();
 
	#-- カレントの一覧を取得 --#
	opendir(DIR, $dir) or die("Can not open directory:$dir ($!)");
	@list = readdir(DIR);
	closedir(DIR);

	my $count_file  = 0;
	my @music_files = ();
	foreach my $file (sort @list){
		next if $file =~ /^\.{1,2}$/;
		
		if( -d "$dir/$file" ){
			#ディレクトリ
			reflexiveFile("$dir/$file");

		}else{
			#ファイル
			$count_file++;
			
			#音楽ファイル
			push(@music_files, $file) if $file =~ /\.(mp3|wma)$/i;
		}
	}
	#print "$dir : $count_file @music_files\n";
	
	#音楽ファイルのみがあるディレクトリならば
	if(@music_files > 0 && @music_files == $count_file){
		my $c_dir = ( split(m|/|, $dir) )[-1];
		print "$dir    $c_dir.playlist.txt\n";
		open(PL, ">$dir/$c_dir.playlist.txt");
		print PL join("\n", @music_files). "\n";
		close(PL);
	}
	
 
}