-2

次の基準に一致する場合、特定のディレクトリ内のいくつかのファイルを削除する必要があります

  1. ファイルは 72 時間以上経過している必要があります

  2. UNIX でファイルのアクセス許可が読み取り専用の chmod 444 である場合、そのファイルは削除しないでください。その他のファイルのアクセス許可が 72 時間以上経過している場合は、ディレクトリからファイルを削除する必要があります。

    このperlスクリプトを手伝ってください

よろしく

ヴィクラム

4

2 に答える 2

1

findすでにオプションがあるのに、なぜこれを行うために Perl スクリプトを作成するのでしょうか?

およびオプションとともに使用findして、条件に一致するファイルを選択できます。サブディレクトリに降りたくない場合にも、おそらく使用したいと思うでしょう。-perm-mtime-maxdepth 0

良いスタートは、次のようなものです。

find . -maxdepth 0 ! -perm 0444 ! -mtime 2 -delete

最後にそれを追加する前に、非常に徹底的にテストしますが-delete:-)

これにより、(メモリから、最初にテストして) 以外のアクセス許可を持つ現在のディレクトリ内のファイルが削除444れ、過去 3 日間変更されていません。

于 2013-09-25T01:42:34.193 に答える
0

find(1) を使用すると高速になることに同意します。

ただし、perl で実行する場合は、削除するファイルのリストを作成し、それらすべてを一度に圧縮するサンプル スクリプトを次に示します。

use strict;

my $dir = '/some/directory';

opendir DIR, $dir;
my @list =
    map { "$dir/$_" }
    grep { -f "$dir/$_" && -M _ > 3 && ((stat _)[2] & 0777) == 0444 }
    readdir DIR;
closedir DIR;

unlink @list;

必要に応じて、チェックやエラー メッセージなどを追加します。そして何よりも、ホームディレクトリでうっかり実行して、動作することを確認しないでください(条件を少し変更して、いくつかのファイルと一致することを確認した後):)

于 2013-09-25T16:09:47.880 に答える