21/02/2009

Modificare la data di creazione, ultima modifica ed accesso dei file

A cura di Efran Cobisi


Se è vero che la riga di comando *nix offriva un ampio numero di utilissimi tool, storicamente in vantaggio rispetto al numero esiguo offerto dalla controparte Microsoft, con l'avvento di Windows PowerShell sono cominciate a venire meno le basi di questa superiorità, in virtù del fatto che oggi è la shell il tool.

Prendiamo il comando touch, ad esempio, che consente nei sistemi *nix (ed in tutti gli altri, grazie ai numerosi port) di portare la data di ultima modifica ed accesso di un file alla data corrente. In PowerShell non c'è alcun bisogno di un tool come questo, perchè la shell stessa è completamente basata sul framework Microsoft.NET, che consente di operare agevolmente sui file ed effettuare questo tipo di operazioni.

Accedere alle informazioni relative ad un file è semplice come utilizzare il comando Get-ChildItem (abbreviabile tramite gli alias gci, dir ed ls). Ecco come recuperare la data di ultima modifica del file test.txt, presente nella cartella corrente:

	(Get-ChildItem test.txt).LastWriteTime

La data di ultimo accesso al file è accessibile utilizzando la proprietà LastAccessTime, mentre quella di creazione è disponibile tramite la proprietà CreationTime.

Modificare queste informazioni è semplice come impostarne i valori utilizzando il classico operatore =, disponibile nella maggior parte dei linguaggi di sviluppo e di scripting.
Per impostare la data di ultimo accesso del file test.txt pari alla data ed ora correnti, potremmo quindi utilizzare questo brevissimo script:

	(Get-ChildItem test.txt).LastAccessTime = [DateTime]::Now

E se i file a cui reimpostare la data di modifica ed ultimo accesso fossero più di uno? Nessuna preoccupazione, ci verrebbe in aiuto la pipeline di PowerShell: ci basterebbe, infatti, impostare correttamente il cmdlet Get-ChildItem in maniera da ritornare i file desiderati ed aggiungere in pipe un blocco ForEach-Object, con lo script illustrato in precedenza.
Ecco come, ad esempio, reimpostare la data di ultimo accesso di tutti i file con estensione txt presenti nella cartella corrente:

	Get-ChildItem *.txt | ForEach-Object { $_.LastAccessTime = [DateTime]::Now }

E, ancora, per emulare l'opzione -r di touch, che consente di utilizzare come riferimento la data di ultimo accesso di un file (nell'esempio reference.txt), anzichè quella corrente, potremmo utilizzare uno script leggermente più complesso ma comunque estremamente leggibile ed intuitivo:

	$referenceTime = (Get-ChildItem reference.txt).LastAccessTime
	Get-ChildItem *.txt | ForEach-Object { $_.LastAccessTime = $referenceTime }

Commenti



Nessun commento disponibile.

EmailVerify.NET is a Microsoft .NET software component that validates e-mail addresses. valid email