Frage

Ich möchte alle, aber die letzten 4 Verzeichnisse in meinem übergeordneten Verzeichnis löschen. Wie würden Sie diese in Bash tun?

War es hilfreich?

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top