Heute hatte ich die Aufgabe, mit einem Script aus einem Ordner alle Dateien außer die 10 neuesten zu löschen. Kein Problem für die PowerShell:
$allFiles = dir *.* | ? { -not $_.PSIsContainer } | sort LastWriteTime -descending
$keepFiles = $allFiles | select -first 10
$allFiles | ? { $keepFiles -notcontains $_ } | % { del $_ -whatIf }
Aber irgendwie kommt mir das zu lang vor, für eine solche Aufgabe… kennt noch jemand eine einfachere (bzw. kürzere) Lösung?
nicht einfacher doch kürzer und nur eine loop.
$allFiles = dir *.* |? {! $_.PSIsContainer } | sort LastWriteTime
del $allFiles[0..($allfiles.count-11)] -whatif
Greetings MOW
@mow: Sehr schön, danke! Da habe ich wohl schon zu kompliziert gedacht 🙂
Einfacher mit der Unix-Shell:
ls -t | tail +11 | xargs rm -f
Gruß
Markus
@Markus: Dein Script löscht aber auch alle Dateien, wenn es z.B. nur 5 im Ordner gibt, oder sehe ich das falsch? Und das wäre nicht so gut 😉
Moin Stefan,
tail +11 zeigt alle Zeilen nach der 10 Zeile. Wenn es weniger sind, dann wird nichts ausgegeben.
Beispiel:
$ ls
file1 file2 file3 file4 file5 file6 file7 file8 file9
user@PC /cygdrive/c/tmp/test
$ touch file10 file11 file12
user@PC /cygdrive/c/tmp/test
$ ls -t | tail +11
file1
file2
Gruß
Markus
Hallo Stefan,
bin zwar spät, habe aber auch noch einen Vorschlag:
dir *.* | ? {!$_.psiscontainer} | sort LastWriteTime -desc
| select -skip(10) | del
Gruß
hma
Hallo hma,
funktioniert gut allerdings löscht deine Variante die 10 aktuellsten wenn die Sortierung “desc” ist
Wer die 10 aktuellsten behalten will sollte “-desc” einfach weglöschen