Supprimer tous les répertoires les plus récents sauf les 4
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?
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