[Console] Fichier le plus vieux

Résolu
Flippy18 Messages postés 14 Statut Membre -  
KuKrApOk59 Messages postés 444 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Je découvre petit à petit Linux, et je suis entrain de me créer une sauvegarde automatique de mes mails-Thunderbird par console.

J'ai fais mumuse avec Crontab, et j'ai maintenant une sauvegarde quotidienne de mes mais, avec suppression de l'archive la plus ancienne (en gros, à n'importe quel moment, j'ai une sauvegarde des 10 derniers jours).

Malgré mon écumage (partiel ?) du net, je suis à présent bloqué.

J'aimerais maintenant que, régulièrement (genre toutes les semaines), l'archive la plus ancienne soit copiée-collée dans un autre répertoire. Tout ce que j'ai trouvé, avec "find", c'est : je veux LES fichiers plus vieux que "tel date". Or, je ne souhaite pas un filtre relatif, mais un filtre absolu.


Est-ce que quelqu'un peut me dire comment copier-coller le fichier le plus vieux d'un répertoire ?


Merci d'avance pour vos hypothétique réponses !

@++

Flippy

5 réponses

  1. KuKrApOk59 Messages postés 444 Date d'inscription   Statut Membre Dernière intervention   84
     
    Salut,

    Pour facilement récupérer le fichier le plus vieux d'un répertoire : ls :)

    $ ls -lt

    va te donner la liste des fichiers (et dossiers) triés par ordre d'âge.
    le dernier est le plus vieux

    ex, chez moi :

    ord@Bender:/tmp$ ls -lt /tmp 
    drwx------ 3 lord lord    4096 sep 16 11:41 gconfd-lord 
    -rw-r--r-- 1 root root 4383658 mar  3  2010 nxclient_3.4.0-7_i386.deb 
    drwx------ 2 root root   16384 fév 22  2010 lost+found


    Pour avoir *juste* le dernier

    lord@Bender:/tmp$ ls -lt | tail -1
    drwx------ 2 root root 16384 fév 22 2010 lost+found

    Et si seul le nom du fichier t'interesse, il y a une option de ls
    qui n'affiche que le nom du fichier

    lord@Bender:/tmp$ ls -c1 -t | tail -1 
    lost+found


    Est ce que c'est ce qu cherchais ?

    Si vous avez votre réponse, pensez à spécifier : [Résolu]
    1
  2. KuKrApOk59 Messages postés 444 Date d'inscription   Statut Membre Dernière intervention   84
     
    lord@Bender:/tmp/plop$ ls -l
    total 0
    -rw-r--r-- 1 lord lord 0 déc 28 18:04 ancien
    -rw-r--r-- 1 lord lord 0 déc 28 18:06 nouveau
    


    Il s'agit donc de faire un cp du fichier 'ancien'

    J'utilise la commandes permettant de récupérer le nom du fichier a déplacer à l'intérieur de ''
    Pourquoi ?
    Parce que ça exécute la commande qui s'y trouve et répond le résultat

    ex :

    lord@Bender:/tmp/plop$ echo "'date'"
    mardi 28 décembre 2010, 18:09:45 (UTC+0100)


    correspond en fait à
    echo "mardi 28 décembre 2010, 18:09:45 (UTC+0100)"


    Ce qui donne dans le cas qui nous interesse :

    lord@Bender:/tmp/plop$ cp 'ls -c1 -t | tail -1' /tmp/plop/fichier_copie


    lord@Bender:/tmp/plop$ ls -l
    total 0
    -rw-r--r-- 1 lord lord 0 déc 28 18:04 ancien
    -rw-r--r-- 1 lord lord 0 déc 28 18:07 fichier_copie
    -rw-r--r-- 1 lord lord 0 déc 28 18:06 nouveau

    Ce n'est pas forcément la plus classe,
    Mais en juste une ligne, je n'ai pas mieux en tête
    1
    1. KuKrApOk59 Messages postés 444 Date d'inscription   Statut Membre Dernière intervention   84
       
      Attention, les ' entourant
      ls -c1 -t | tail -1
      ne sont pas des simples guillemets, il s'agit du caractère formé lors de l'appui sur [AltGr] et [7]
      Cela ressemble à un accent grave
      0
    2. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Salut,

      Les quotes inverses sont révolues depuis belle lurette, il est préférable de leur préférer la syntaxe :

      $(commande)

      Ce qui donne :

       cp $(ls -c1 -t | tail -1) /tmp/plop/fichier_copie
      0
    3. KuKrApOk59 Messages postés 444 Date d'inscription   Statut Membre Dernière intervention   84
       
      Je vais me mettre à la page dans ce cas ^^
      0
  3. Flippy18 Messages postés 14 Statut Membre
     
    Tout d'abord, merci de ta réponse.

    J'étais arrivé à une solution de ce type. C'est surtout l'étape d'après qui me bloque.

    Dois-je faire une commande du type :
    cp ls -lt | tail -1 (dossier de destination)


    et si tel est le cas, est-il possible de m'indiquer la syntaxe exacte ?
    0
  4. Flippy18 Messages postés 14 Statut Membre
     
    Cette solution est quasiment parfaite. Pour le côté "Classe", je m'en contenterais, je préfère décomposer les suites de code. Plus facile pour comprendre :p

    Il me reste cependant une question :

    cp 'ls -c1 -t | tail -1' /tmp/plop

    Ceci fonctionne si je me trouve dans le bon répertoire (lord@Bender:/tmp/plop$)

    Mais moi, j'aimerais que cette commande s'exécute lorsque que la console n'est pas dans le bon répertoire, mais plutôt dans l'arborescence de base (lord@Bender:$ ou quelque chose comme ça)

    En tout cas, merci de ton aide. J'avance a pas de géant !
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Salut,

      Pour faire ce que tu veux et vu la solution donnée, il te faut être impérativement dans le répertoire où se trouve les fichiers.
      Donc il suffit d'un :

      cd /bon/répertoire

      avant de lancer la commande ;-))
      0
    2. Flippy18 Messages postés 14 Statut Membre
       
      Arf. C'est malheureusement impossible. En tout cas, je n'ai pas la connaissance de la manip'.

      Puisque Crontab va lancer un script sh. Comment dire au script qu'il doit s'exécuter dans le bon répertoire ?
      0
    3. Flippy18 Messages postés 14 Statut Membre
       
      Ok. C'est bon, j'ai trouvé la parade.

      cd &co ; cp ls & co ; cd -



      Merci pour ton aide.
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Flippy18 Messages postés 14 Statut Membre
     
    Merci à KuKrApOk59 & zipe31 pour leur aide très précieuse.

    Ma sauvegarde est maintenant complètement opérationnelle ! Merci beaucoup !
    0