Question

Je souhaite supprimer tous les répertoires les plus récents, sauf les 4, de mon répertoire parent. Comment feriez-vous cela à Bash?

Était-ce utile?

La solution

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

Modifier: a ajouté l'argument 'a' à ls

Autres conseils

Veuillez préciser si vous voulez dire & # 8220; supprimer tous les répertoires, à l'exception des quatre nouveaux répertoires & # 8221; ou "tout supprimer" (fichiers et répertoires) à l'exception des quatre répertoires les plus récents & # 8221;.

Notez également que les temps de création ne sont pas connus pour les répertoires. On peut seulement savoir quand un répertoire a été modifié pour la dernière fois, c'est-à-dire si des fichiers ont été ajoutés, supprimés ou renommés.

vous pouvez effectuer les opérations suivantes:

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

(retirez le # avant que rm pour que cela se produise vraiment;))

Une autre façon de le faire, avec BSD-safe, avec des tableaux (pourquoi pas?)

#!/bin/bash
ARRAY=( `ls -td */` )
ELEMENTS=${#ARRAY[@]}
COUNTER=4
while [ $COUNTER -lt $ELEMENTS ]; do
  echo ${ARRAY[${COUNTER}]}
  let COUNTER=COUNTER+1
done
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top