IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Tester si un fichier est tout seul dans son repertoire


Sujet :

Shell et commandes GNU

  1. #1
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2014
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2014
    Messages : 40
    Points : 48
    Points
    48
    Par défaut Tester si un fichier est tout seul dans son repertoire
    Bonjour,

    Je dois réaliser un script de "nettoyage" qui supprimera tous les fichiers d'une arborescence dont la date de modification est plus ancienne qu'un nombre de jour choisit par l'utilisateur.

    Mais ces fichiers ne doivent pas être supprimer si il sont tout seul dans leur dossier...

    Par exemple :

    /racine--------dossier a--------fichier ancien 1
    |
    |---fichier ancien 2
    |
    |---fichier pas ancien 1
    |
    |---------dossier b -------------fichier pas ancien 2

    Ici, les fichier ancien 1 et 2 sont supprimés dans le dossier a. Les fichiers pas anciens sont laissé intacte.

    Cas un peu plus complexe :

    /racine--------dossier a--------fichier ancien 1
    |
    |---fichier ancien 2
    |
    |---fichier ancien 3
    |
    |---------dossier b -------------fichier ancien 4


    Ici, dans le dossier b, le fichier ancien est laissé car il est tout seul dans sont dossier.
    Ici, les fichier anciens sont supprimés dans le dossier a, sauf un seul (de préférence le plus récent).

    Je crois qu'au niveau du code, ce que je souhaite faire s’exprime avec la structure suivante :

    supprimer fichier si :
    fichier plus vieux que date choisit & fichier n'est pas tout seul dans son dossier

    mais dans ce cas la, je suppose que ce n'est pas la version la plus récente du fichier qui sera épargner, mais plutôt la version la plus en bas dans la liste alphabétique.

    J'ai réaliser quelques bout de script, je débute beaucoup en .sh sous linux, en revanche, comment tester si un fichier est seul dans son arborescence, je n'en ai aucune idée... et je ne voit pas du tout quelle structure adopté pour garder le fichier le plus récent, peut-être quelque chose comme :

    si :
    Tous les fichiers dans le dossier courant sont ancien
    alors toucher ("touch") le fichier le plus récent

    mais ça ne me parait pas très propre de modifier la date de dernière modification... je préférerais éviter parce qu'après je n'aurais plus aucune info sur l'ancienneté du fichier.

    Auriez-vous au moins une idée d'une structure à laquelle je pourrais me référer ? Merci.

  2. #2
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Bonjour

    Cette discussion ressemble à une autre discussion très récente.

    Liste des fichiers avec la date de dernière modification (nombre de secondes depuis l'epoch pour avoir un entier) avec find, en séparant chemin et nom de fichier. (l'arborescence est alors apparente)
    Ces informations sont organisées en champs avec un séparateur sous forme de point-virgule.

    awk pour ajouter le nombre d'occurrences d'un dossier; et supprimer les fichiers à garder.

    On obtient la liste des fichiers à supprimer. On l'envoie alors à xargs rm.

    Facile.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  3. #3
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2014
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2014
    Messages : 40
    Points : 48
    Points
    48
    Par défaut
    Je viens de jeter un oeil à l'autre discutions, en effet il y-a de la ressemblance.

    Pour la partie avec find, j'ai ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    cd /home/RS/S 
    read date
     
    find  "VIDEOS/ARCHIVES"  -type f -name '*.wmv' -mtime +$date -exec rm -R {} \; -o -type f -name '*.mpg' -mtime +$date -exec rm -R {} \; -o -type f -name '*.mpeg' -mtime +$date -exec rm -R {} \; -o -type f -name '*.avi' -mtime +$date -exec rm -R {} \;

    Ceci dit, je suis sur ce script depuis lundi ^^

    Je ne vois pas du tout comment faire cela :

    Liste des fichiers avec la date de dernière modification (nombre de secondes depuis l'epoch pour avoir un entier) avec find, en séparant chemin et nom de fichier. (l'arborescence est alors apparente)
    Ces informations sont organisées en champs avec un séparateur sous forme de point-virgule.
    "En séparant le chemin et le nom de fichier" : à la limite je peut récupérer la sortie de find, et après ta solution implique un reformatage de cette sortie pour mettre des points virgules ? find ne semble pas pouvoir lister les fichiers comme cela.

    J'ai commencer un peu plus tôt à tenter de copier ces fichiers, en préservant l'arborescence, via -exec cp -R {} /media/Archive/ \; mais l'arborescence n'était pas préservé. xarg permet surement de récuperer le chemin de find et de l'envoyer vers cp... mais cp à besoin de 2 arguments, la source et la destination, du coup je ne voit pas comment utiliser xarg avec cp...

    C'est vraiment dommage ces difficultés, les administrateurs avant moi faisait tout le travail manuellement, mais depuis que les serveurs sont passés sous linux, je suis sur qu'il y-a la possibilitée d'automatiser cela.

  4. #4
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 277
    Points : 12 722
    Points
    12 722
    Par défaut
    Bonjour,
    Citation Envoyé par nephi28 Voir le message
    "En séparant le chemin et le nom de fichier" : à la limite je peut récupérer la sortie de find, et après ta solution implique un reformatage de cette sortie pour mettre des points virgules ? find ne semble pas pouvoir lister les fichiers comme cela.
    Si:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find . -printf "%T@;%h;%f\n"
    Cordialement.

  5. #5
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find . -printf "%T@;%h;%f\n" |sort -r -t';' -n -k1,1 |awk -F';' '{if (a[$2]) next; a[$2]++; print $2"/"$3;}' |xargs rm -i
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  6. #6
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 277
    Points : 12 722
    Points
    12 722
    Par défaut
    Je crois que cela ne fonctionne pas dans tous les cas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $ tree -F
    .
           dossier1/
                 dossier1a/
                 dossier1b/
                 dossier1c/
                 file1
     
    4 directories, 1 file
    $ find . -type f -printf "%T@;%h;%f\n" |sort -r -t';' -n -k1,1 |awk -F';' '{if (a[$2]) next; a[$2]++; print $2"/"$3;}'
    ./dossier1/file1
    Je ne pense pas qu'il doit trouver file1
    Cordialement.

  7. #7
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Il n'a pris que des exemples où les éléments sont uniquement des fichiers ou uniquement des dossiers.
    Le tout est de savoir ce que veut dire "fichier seul". Si ça veut dire "sans fichier à côté", c'est bon. Si c'est "Sans fichier ni dossier", c'est pas bon.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  8. #8
    Membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2014
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2014
    Messages : 40
    Points : 48
    Points
    48
    Par défaut
    Je vous remercie pour vos réponse.

    Entre temps, la problématique à changé, je suis passé de supprimer/archiver des vidéos selon des critères précis à du cas par cas quasiment.
    Du coup, ce n'est plus moi qui m'en occupe. Merci pour votre réaction, cela fait 2 fois que j'ai pas mal de réponse sur ce forum

    Vu la syntaxe de certaines commandes dans vos réponse, j'aurais pu y passer quelques jours ^^

Discussions similaires

  1. Réponses: 3
    Dernier message: 12/07/2014, 00h20
  2. Réponses: 6
    Dernier message: 07/07/2014, 12h13
  3. Tester si un fichier est vide + recup valeur dans ce fichier
    Par Johann7751 dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 26/02/2009, 15h51
  4. Des "=" qui se mettent tout seuls dans une TLisBox
    Par [Silk] dans le forum Langage
    Réponses: 2
    Dernier message: 11/11/2005, 12h35
  5. [XSL] Tester si la valeur est un entier dans un xml
    Par MrMaze dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 23/07/2003, 04h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo