3

私はよく、さまざまなシェル スクリプトを使用してログ/レポート ファイルを作成します。これは問題ありませんが、ほとんどの場合、コンテンツを簡単に確認するだけで済みます。通常は、同じ日または最大 1 週間後です。

私がやりたいのは、ファイルに期限切れのフラグを立てることができるようにすることです。そのため、一定の期間が経過すると、ファイルは削除されるか、アーカイブ ディレクトリに移動されます。

ファイルの作成を制御できるので、.SEF などの特定の拡張子を付けて、ハード ドライブのディレクトリを定期的に解析するサービスを作成することもできますが、これは少し面倒です。

カスタムファイル属性も調べました:

http://social.msdn.microsoft.com/Forums/en/netfxbcl/thread/173ab6de-3cd8-448f-8c42-de9d2240b913

しかし、ファイル属性をファイルに追加するには、何かを書く必要があります。したがって、Powershell/SFU または同様の場合:

cat JobOutput.txt | grep -e Error | expire > report.txt

または単純な古いウィンドウ:

type JobOutput.txt | findstr Error | expire > report.txt

誰かがこのようなリモートで何かをしましたか?

編集:

上で説明したことは、私がやりたいことのほんの一面です。たとえば、制限時間内に応答する必要があり、その後削除される電子メールを送信する場合があります。

もう 1 つの例は、一定期間後に使用したくない一時的なシステム回避策の詳細を記載したドキュメントをリリースする場合です。

もちろん、さまざまなアプリケーションの気まぐれに夢中になっていますが、カスタムファイル属性のアイデアは有望で魅力的に見えました. もちろん問題は、それらが各ファイルタイプにどのように適用されるかということです...

今のところ、私が最初に提起した質問に基づいてこれを閉じて喜んでいます。その場合、スケジュールされたジョブによってクリアされるカスタム拡張を定義できます。

解決:

OK、私はそれにかなり慣れているので、Powershellソリューションを(少し調整して)使用することにしました:

$HowManyDays = 15  
$LastWrite = (Get-Date).AddDays(-$HowManyDays)  
Get-ChildItem -recurse -include *.sef |     
Where {$_.LastWriteTime -le "$LastWrite"} |     
Remove-Item 

これについてのあなたの助けに感謝します。

4

4 に答える 4

1

Alex K. が提供したものにかなり満足している場合は、簡単に調整できるはずです。

cmd ファイルを作成します。それを呼び出すときに、ファイル検索パターンを渡します*.*

cmd ファイルの呼び出しで:

robocopy "c:\from" "c:\to" /s %1 /MINAGE:7 /MOV 

参照:コマンド ライン パラメーターをバッチ ファイルに渡すにはどうすればよいですか?

于 2012-09-24T21:01:22.030 に答える
0

2 つの問題があります。2. 期限切れのファイルを (すばやく) 見つける方法。

1 については、ファイル拡張子が許容されるアプローチであるかどうか、または何らかのカスタム ファイル属性を使用する必要があるかどうか、およびこれを NTFS ファイル システムに格納するか、ファイルのコンテンツに埋め込むかを決定する必要があります。

2 の場合、locate32 などを使用してインデックスを作成できますが、これでは拡張子に基づいてファイルをすばやく検索することしかできません。カスタム属性はありません -- ソースを取得して、locate32 を取得し、カスタム属性にインデックスを付ける機能を追加したい場合を除きます。これは非常に便利です (たとえば、カスタム プロパティまたは DLL 内のバージョンを持つ Word 文書)。インデックス作成のもう 1 つの方法は、「期限切れになる」ディレクトリ内の期限切れになるファイルへのシンボリック リンクを作成することです。

実際の削除は簡単で、ここに掲載されているソリューションのいずれかを使用できます。インデックスを使用すると、期限切れのファイルをすばやく見つけることができます。

于 2012-09-26T15:48:38.170 に答える
0

私も予定された呼び出しに行きます。

Powershell を呼び出したり、robocopy をダウンロードしたくない場合は、コマンドラインのワンライナーを使用できます。

forfiles /p "C:\Path" /m *.log /d -7 /c "cmd /c del @file"

これを微調整して、任意のフォルダーとサブフォルダーをクリーンアップするようにスケジュールできるバッチに焼き付けました。参考までに、次のようなものが得られます。

forfiles /p "C:\Path" /m *.* /d -7 /c "cmd /c if [@isdir]==[TRUE] rmdir @file /s /q"
于 2012-09-24T22:10:08.207 に答える
0

タスク スケジューラによってスケジュールされた Powershell の小さなスクリプトを使用して、15 日より古いログを削除します。

ファイルを削除または移動できます。スクリプトは次のとおりです。


$HowManyDays = 15

$LastWrite = (Get-Date).AddDays(-$HowManyDays)

Get-ChildItem *.log |
    Where {$_.LastWriteTime -le "$LastWrite"} |
    Remove-Item

于 2012-08-30T11:33:58.020 に答える