Je veux supprimer tous les dossiers qui sont plus vieux que 1 jour avec la command suivante:
find /test -mmin +1440 | xargs rm -rf
Mais la sortie de find
lists /test
(et le supprimerait en conséquence).
Comment puis-je find uniquement les sous-directorys de /test
? ( -maxdepth
/ -mindepth
non disponible dans AIX)
Comme @meuh l'a dit dans son commentaire, vous pouvez utiliser /test/*
au lieu de /test
. Votre command pourrait alors ressembler à ceci:
find /test/* -type d -mmin +1440 | xargs rm -rf
Dans ce cas, seuls les sous-dossiers de /test
seront supprimés.
POSIXly:
find /test/. ! -name . -type d -mtime +0 -exec rm -rf {} \; -prune
(nous utilisons -prune
pour les directorys que nous supprimons avec succès afin que find
ne se plaigne pas qu'ils sont soudainement partis).
Dans tous les cas, notez que l'heure de modification (telle que vérifiée par -mtime
ci-dessus) d'un file de directory reflète uniquement la dernière fois qu'une input a été ajoutée, supprimée ou renommée.
Il n'est pas mis à jour lorsque le contenu de l'un des files (de type regular ou directory) est modifié. En particulier, toute modification apscope aux sous-directorys ou à leur contenu n'affecte pas l'heure de modification d'un directory.
Notez que tous -mindepth
, -maxdepth
et -mmin
sont des extensions GNU (bien qu'elles soient sockets en charge dans d'autres implémentations).
L'équivalent standard de find . -maxdepth 1
find . -maxdepth 1
serait:
find . -name . -o -prune
Pour -mindepth 1
:
find . ! -name .
Pour -mindepth 1 -maxdepth 1
:
find . ! -name . -prune
Pour les directorys autres que .
, utilisez find some/dir/. ...
find some/dir/. ...
comme ci-dessus.
Pour les autres valeurs de profondeur, vous pouvez utiliser -path
, mais notez que depuis qu'il a été récemment ajouté à la norme, certains systèmes (comme AIX) ne l'ont toujours pas.
Pour: -maxdepth 2
:
find . ! -path '*/*/*' -o -prune
Pour: -mindepth 2
:
find . -path '*/*/*'
Pour un autre dir:
find some/dir//. -path '*//*/*/*'
Eh bien, le mmin primaire est un GNUism qui n'est probablement pas supporté sur AIX car c'est une expansion stupide par rapport à ce que les gens de BSD et moi avons utilisé comme extension dans les années 1980 déjà. Compte tenu du fait que sfind comstack bien sur AIX, je recommand:
sfind . -mindepth 1 -type d -mtime +24h -exec rm -rf {} +
Le code est dans schilytools à l' adresse : https://sourceforge.net/projects/schilytools/files/
touch -t 201508260000 dummyfile find /path/to/files -type f ! -newer dummyfile -delete
Format d'horodatage yyyyMMddhhmm
La première ligne crée un file qui a été modifié pour la dernière fois le 26 août 2015. La deuxième ligne trouve tous les files dans / path / to / file dont la date n'est pas plus récente que le file dummy, puis les supprime.
Si vous voulez vérifier qu'il fonctionne correctement, supprimez l'argument -delete
et il vous suffit de listr les files qui seraient supprimés.
Copié depuis le lien
find /test -type d -mtime +1| egrep -v '^/test$'|xargs -I{} rm -rf {}