[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: déplacer des fichiers antérieurs à une date



C'est putain de hors sujet. C'est vrai. Et ce qui enerve le plus, c'est que 
certains posent ce genre de question avant de faire le moindre man. Et dans
ce cas, sujet d'enervement supplémentaire, c'est rédigé sous caca outlook, et
donc ca pose des titres illisibles pour ceux qui sont sous debian (ce qui
devrait etre la majorité ici, normalement, non?)

Mais bon. Bonne pomme, je répond, et fait donc doublons avec les livres de
prise en main de linux, qui apres tout ne coutent pas si cher quand on ne 
connait que dalle à linux et qu'on veut s'y mettre. Et pis apres tout, j'ai
fait l'economie de ces bouquins au début. Mais pas de la commande man. Si on
est pas pressé, ca répond aux questions, meme les plus générales comme celle la
;)

Tout ca pour dire que si tu lis pas la doc, tu met les autres en position 
désagréable : soit ils répètent, sachant que dans 2 semaines, y'aura la meme
question, et tout sera à refaire, soit ils te flamment. *Pour l'instant*, j'ai 
choisi la solution 1.

------------------------------------

Voici un kit de manipulation de fichiers, sous forme de script bash (a mettre
dans un fichier commancant par la ligne
#!/bin/bash
ou à taper dans la console si tu es dans un shell bash)
nb: C'est bash-specific. Si t'as un autre shell, ca va pas marcher...


Avant tout, il te faut une boucle pour agir sur tous les fichiers
for name in <liste des fichiers> ; do <action à faire> ; done;

action a faire pouvant etre "mv $name $name.old"
il est plus sage de mettre des espaces de partout, particulierement
autour des ;

Pour la liste des fichiers, soit tu les ecrits toi meme sans apostrophes ni 
rien
mais séparés d'espaces. Soit tu met une commande qui va les chercher.
Pour que cette commande s'execute avant le reste du script. Il faut mettre 
des quotes inverses `.
Par exemple, 
for name in `ls` ; do echo $name; done;
va, pour chacun des noms de fichier ou repertoire, afficher ce nom.
En fait, bash fait la commande ls (qui ecrit les noms de fichier), prend ce que
ls ecrit, le recopie à la place de `ls` dans le script, et fait le reste du
script.
Maintenant, à la place de ls, tu met ce que tu veux. Si tu veux les programmes
qui ont ete modifié il y a plus de 5 heures, tu fait

for name in `find ./ -mtime 5` ; do <action à faire> ; done;

Un petit man find pourra etre utile pour mettre au point l'expression à mettre
pour faire exactement ce que tu veux... 

Nota: Si t'as une machine caca windows avec des fichiers avec des espaces, tout
ce que je viens de te dire ne marche pas. Cherche dans les archives de la 
liste,
la question a ete posée fraichement, et (de memoire) Vincent Danjean a répondu.

Voila, Mt.


Reply to: