Domanda

Voglio eliminare tutte le directory tranne le 4 più recenti nella mia directory principale.Come lo faresti in Bash?

È stato utile?

Soluzione

ls -atrd */ | head --lines=-4 | xargs rm -rf

Modificare: aggiunto l'argomento 'a' a ls

Altri suggerimenti

Si prega di chiarire se si intende "eliminare tutte le directory tranne le quattro più recenti" o "eliminare tutto (file e directory) tranne le quattro directory più recenti".

Tieni inoltre presente che i tempi di creazione delle directory non sono noti.Si può solo sapere quando una directory è stata modificata l'ultima volta, cioè quando i file sono stati aggiunti, rimossi o rinominati.

potresti fare quanto segue:

#!/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

(rimuovi il # prima di rm per realizzarlo davvero;))

Un altro modo, sicuro per BSD, per farlo, con gli array (perché no?)

#!/bin/bash
ARRAY=( `ls -td */` )
ELEMENTS=${#ARRAY[@]}
COUNTER=4
while [ $COUNTER -lt $ELEMENTS ]; do
  echo ${ARRAY[${COUNTER}]}
  let COUNTER=COUNTER+1
done
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top