Alles löschen, aber die letzten 4 Verzeichnisse
Frage
Ich möchte alle, aber die letzten 4 Verzeichnisse in meinem übergeordneten Verzeichnis löschen. Wie würden Sie diese in Bash tun?
Lösung
ls -atrd */ | head --lines=-4 | xargs rm -rf
Edit: hinzugefügt 'a' Argument zu ls
Andere Tipps
Bitte klären, ob Sie bedeuten „alle Verzeichnisse löschen, aber die vier newst Einsen“ oder „alles (Dateien und Verzeichnisse) mit Ausnahme der vier neuesten Verzeichnisse löschen“.
Bitte beachten Sie auch, dass die Erstellungszeiten für Verzeichnisse nicht bekannt. Man kann nur sagen, wenn ein Verzeichnis zuletzt geändert wurde, das heißt, hatte Dateien hinzugefügt, entfernt oder umbenannt.
Sie können folgendes tun:
#!/bin/bash
#store the listing of current directory in var
mydir=`ls -t`
it=1
for file in $mydir
do
if [ $it -gt 5 ]
then
echo file $it will be deleted: $file
#rm -rf $file
fi
it=$((it+1))
done
(entfernen Sie das # vor rm es wirklich möglich zu machen;))
Eine weitere, BSD-Safe, Art und Weise, es zu tun, mit Arrays (warum nicht?)
#!/bin/bash
ARRAY=( `ls -td */` )
ELEMENTS=${#ARRAY[@]}
COUNTER=4
while [ $COUNTER -lt $ELEMENTS ]; do
echo ${ARRAY[${COUNTER}]}
let COUNTER=COUNTER+1
done