Table of Contents
- Perl/ディレクトリの再帰処理
サイズがゼロのファイルを削除
概要
- カレントディレクトリからサイズがゼロのファイルを削除する。
- 「-d」オプションを付けると削除実行、無しだと削除対象のリストアップのみ行う。
- ドットファイルも対象とする。
ソースコード
-
delSizeZero.zip
#!/usr/bin/perl # カレントディレクトリからサイズゼロのファイルを削除する use strict; use warnings; use utf8; my $progName = 'delSizeZero'; my $delete = 0; if ( @ARGV > 0 ){ if ( $ARGV[0] eq '-d' ){ $delete = 1; } else { die("List up files that are size 0.\nusage: $progName [-d]\n -d: delete them\n"); } } foreach my $file (sort(glob("{.*,*}"))){ if ( -f $file && -s $file == 0 ){ $file =~ m{([^;]+)$}; my $fileName = $1; print "$fileName\n"; if ( $delete ){ unlink($file) or die("$progName: $fileName: $!\n"); } } } # EOF
リンク
テキストファイルからXML部分を抜き出し
概要
- テキストファイルからXML部分を抜き出す。
- 1ファイルにXMLは1個。
- 文字コードはEUC。
- 処理はWindows上で行う。
ソースコード
#!/usr/local/bin/perl
# カレントディレクトリのテキストファイルのリスト
@filelists = <./*.txt>;
# print join( "\n", @filelists );
foreach $fname_in (@filelists){
$fname_out = $fname_in;
$fname_out =~ s/\.txt/\.xml/;
open( IN, $fname_in );
@lines = < IN >;
close( IN );
$body = join( "", @lines );
# XML部分を正規表現で抜き出す
# '.' は改行にマッチしないので、代わりに [\x00-\xff] を使う (マルチバイトストリングの場合)
# unicode だと [\x0000-\xffff] を使う
if ( $body =~ /^[\x00-\xff]*(\<\?xml [\x00-\xff]*\<\/[^\>]+\>)[\x00-\xff]*$/ ){
$body = $1 . "\n";
# CRLF から CR を削除
# $body =~ tr/\r//d;
open( OUT, ">" . $fname_out );
# テキストモードだと自動的に CR が付加されるのでバイナリモードで書き出し
binmode( OUT );
print OUT $body;
close( OUT );
}
}
#EOF