|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : septembre 2011 Messages : 2 ![]() |
Bonjour,
Je souhaite automatiser l'archivage de fichiers dans un script. (par exemple, lister tous mes fichiers de 2008, les déplacer dans un répertoire 2008 pour pouvoir lez zipper) Par exemple quand je lance directement : ls -lrt *2008* -bash: /bin/ls: Argument list too long Je n'arrive pas à affecter cette commande ls à une variable dans mon script, qqchose du style : X=ls -lrt *2008* mv X ./2008 où X serait ma liste de fichiers... Quelqu'un aurait-il une idée svp? |
|
|
10
|
|
|
#2 | ||
|
Expert Confirmé Sénior
![]() francois Ingénieur systèmes et réseaux Inscription : juillet 2006 Messages : 3 538 ![]() |
tries les par durée de vie au lieu de les trier par nom...ca permet de faire fichier par fichier et de ne pas avoir d'arg list too long...
par exemple Code :
|
||
|
|
00
|
|
|
#3 | ||||
|
Expert Confirmé Sénior
![]() Frédéric Ingénieur développement logiciels Inscription : février 2006 Messages : 3 055 ![]() |
Citation:
J'ai rarement vu un ls échouer parce qu'il y a trop de fichiers...??? Toutefois, il y a une différence entre ton besoin exprimé (lister tous les fichiers de 2008) et ton traitement (qui est de lister tous les fichiers ayant 2008 dans leur nom). Ce n'est pas parce qu'ils ont 2008 dans leur nom qu'ils sont forcément de 2008... Citation:
Déjà faut pas mettre ls -l car tu auras aussi les attributs des fichiers dans X. Ensuite, ce serait plus juste de mettre mv $X car c'est la norme quand on veut accéder au contenu des variables. Maintenant, il faut aussi savoir que le shell est limité et que souvent tu ne peux pas tout faire en une commande magique. C'est pour ça qu'il existe les boucles de traitement de flux. Le principe est le suivant: tu envoies le flux dans un | while read line; do...done. Le read se calant sur le <return>, chaque ligne ne contiendra qu'une ligne venue du flux. Et la boucle while traitera toutes les lignes. Donc une des possibilités pourrait être de faire Code bash :
Tu peux aussi utiliser le find qui possède tout un tas d'options de recherche plus une option -exec permettant de faire traiter chaque élément trouvé par find par la commande de ton choix Code bash :
find . -name "*2008*" -type f -exec mv {} 2008 \;
__________________
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche. Tout ce qu'un individu reçoit sans rien faire pour l'obtenir, un autre individu a dû travailler pour le produire sans en tirer profit. Tout Pouvoir ne peut distribuer aux uns que ce qu'il a préalablement confisqué à d'autres car on n'accroît pas les biens en les divisant. Quand la moitié d'un peuple croit qu'il ne sert à rien de faire des efforts car l'autre moitié les fera pour elle, et quand cette dernière moitié se dit qu'il ne sert à rien d'en faire car ils bénéficieront à d'autres, cela s'appelle le déclin et la fin d'une nation. Dr. Adrian Rogers, 1931 |
||||
|
|
10
|
|
|
#4 |
|
Invité de passage
![]() Inscription : septembre 2011 Messages : 2 ![]() |
Merci pour vos réponses, je vais essayer de suite...
|
|
|
10
|
Copyright © 2000-2012 - www.developpez.com