1. ホーム
  2. スクリプト・コラム
  3. パール

Windows の Thumbs.db から画像キャッシュのサムネイルを削除する Perl

2022-01-28 23:16:28

以前、他の人がやっていたプロジェクトを引き継いだところ、SVNで*.dbが無視されて処理されないため、画像のキャッシュサムネイルがコミットされてしまい、画像フォルダを開くだけでThumbs.dbが変更されていることが判明しました。

やるべきことは2つあります。

1つは、Thumbs.dbファイルが今後コミットされないようにsvnの設定を変更することです

II. 指定したディレクトリの Thumbs.db ファイルを一括削除する

だから私はperlで1つを書いた、コードは前のperlのトラバーサルディレクトリにあるいくつかの変更を行い、自分自身を注意する2つの主要なポイントがあります。

1つは、ファイルパスのデフォルトがWindowsでは" \" 、Linuxでは"/" なので、これを"/"に変更すること。

2, == の代わりに eq を使って 2 つの文字列を等しく比較します (== は等しい値を返し、eq は等しい文字列を返します)。

3、アンリンクでファイルを削除するには、ファイルへのフルパスを指定する必要があります。

四、perlのelse ifは、"e"を抜いてelsifと書く。

v. perlのレギュラーマッチは、=~または! ~

完全なコードは次のとおりで、この部分を修正するためにルールを変更する必要があります。

コピーコード コードは以下の通りです。

#! /usr/bin/perl
use strict;
use warnings;
my $path = "C:/FlexApp/xx";
my $filecount = 0;
sub parse_env {
     my $path = $_[0]; #or use my($path) = @_; @_ is similar to arguments in javascript
     my $subpath;
     my $handle;
     if (-d $path) {# whether the current path is a directory
         if (opendir($handle, $path)) {
             while ($subpath = readdir($handle)) {
                 if (! ($subpath =~ m/^\. $/) and ! ($subpath =~ m/^(\. \.) $/)) {
                     my $p = $path."/$subpath";
                     if (-d $p) {
                         parse_env($p);
                     } elsif ($subpath eq "Thumbs.db") {
                         ++$filecount;
                            print "The file path:". $p."------------The file name: $subpath\n";
                         unlink($p) or warn "failed on $subpath:$! ";
                     }
                 }
             }
             closedir($handle);
         }
     }
     return $filecount;
}
my $count = parse_env $path;
my $str = "Total number of deleted files:". $count;
print $str;

コンソール出力です。