Ciao!
si può comprimere ancora di più! :)
ls -r|?{!@(ls -fo $_.fullname)}|rm -wh
Però, personalmente, eviterei script così poco leggibili; prima o poi dovrai ritornare a modificarli e allora sì passerai dei brutti minuti...
Tornando a noi, la parte principale del blocco che ti ha incuriosito
ls -force $_.fullname
ritorna tutti i file della cartella specificata da
$_.FullName, che altro non è che il nome completo dell'elemento ritornato dal primo
ls.
Ora, poichè questa istruzione potrebbe ritornare
n elementi e PowerShell determina al volo il tipo di dato da ritornare al chiamante, l'autore ha utilizzato qui l'operatore di splatting
@, che prende l'operando e ritorna sempre un array.
Esempio:
@('xyz')
Ritorna un array di stringhe e non solo una stringa. Infatti:
@('xyz').Length
# Ritorna 1
@(1, 2, 3, 4, 5).Length
# Ritorna 5
@().Length
# Ritorna 0
Da qui, l'autore dello script verifica che l'array non sia vuoto utilizzando l'operatore
-not, che si può impiegare come in C utilizzando un punto esclamativo prima dell'espressione da verificare:
-not @(1, 2, 3)
# Ritorna $false
!@(1, 2, 3)
# Ritorna $false
!@()
# Ritorna $true
Quindi il blocco Where-Object filtra solo le directory che non hanno elementi figli.
Ciao, a presto!