2010-09-01 13 views
1

Mon script shell:modifier le script shell pour supprimer des dossiers ainsi que les fichiers

#!/bin/bash 
if [ $# -lt 2 ] 
then 
    echo "$0 : Not enough argument supplied. 2 Arguments needed." 
    echo "Argument 1: -d for debug (lists files it will remove) or -e for execution." 
    echo "Followed by some path to remove files from. (path of where to look) " 
    exit 1 
fi 

if test $1 == '-d' 
then 
    find $2 -mmin +60 -type f -exec ls -l {} \; 
elif test $1 == '-e' 
then 
    find $2 -mmin +60 -type f -exec rm -rf {} \; 
fi 

En gros, cela trouvera des fichiers dans un répertoire donné fourni comme second argument et aucune des deux listes (-d pour l'argument 1) ou supprimer (-e pour l'argument 1) fichiers modifiés il y a> 60 minutes.

Comment puis-je retravailler cela pour supprimer également des dossiers?

Répondre

2
  • Retirez -type f
  • changer ls -l-ls -ld

Modifier 1 listera tout et pas seulement les fichiers. Cela inclut également les liens. Si vous n'êtes pas bien avec la liste/suppression autre chose que des fichiers et des répertoires alors vous devez liste/supprimer séparément les fichiers et répertoires comme:

if test $1 == '-d' 
then 
    find $2 -mmin +60 -type f -exec ls -ld {} \; 
    find $2 -mmin +60 -type d -exec ls -ld {} \; 
elif test $1 == '-e' 
then 
    find $2 -mmin +60 -type f -exec rm -rf {} \; 
    find $2 -mmin +60 -type d -exec rm -rf {} \; 
fi 

Change 2 est nécessaire que ls -l sur un répertoire liste les fichiers dans le répertoires.

+0

Oh, je suis désolé de perdre votre temps. Merci. – Chris

+2

Vous pouvez combiner les '-types':' find $ 2 -mmin +60 \ (-type f -o -type d \) -exec ls -ld {} \; ' –

+0

Attention: ceci peut ne pas faire ce que vous voulez: les répertoires (y compris $ 2 lui-même) seront supprimés même s'ils contiennent des fichiers/sous-répertoires actifs, si le répertoire lui-même n'a pas été modifié depuis une heure. Éviter ce problème est ... plus compliqué, surtout en mode de fonctionnement à sec. –

1
#!/bin/bash 
if [ $# -lt 2 ] 
then 
    echo "$0 : Not enough argument supplied. 2 Arguments needed." 
    echo "Argument 1: -d for debug (lists files it will remove) or -e for execution." 
    echo "Followed by some path to remove files from. (path of where to look) " 
    exit 1 
fi 

if test $1 == '-d' 
then 
    find $2 -mmin +60 -type d -exec ls -l {} \; 
    find $2 -mmin +60 -type f -exec ls -l {} \; 
elif test $1 == '-e' 
then 
    find $2 -mmin +60 -type d -exec rm -rf {} \; 
    find $2 -mmin +60 -type f -exec rm -rf {} \; 
fi 

Cela devrait fonctionner pour vous.