
Envoyé par
nathan29
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
Salut
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...

Envoyé par
nathan29
Je n'arrive pas à affecter cette commande ls à une variable dans mon script, qqchose du style :
X=ls -lrt *2008*
Faut utiliser les backquottes style var=`commande`Le shell exécute la commande et reclaque tout ce qu'elle affiche à l'endroit des backquottes. Donc dans l'exemple ça le met dans la variable "var"

Envoyé par
nathan29
mv X ./2008 où X serait ma liste de fichiers...
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
1 2 3 4
| ls -rt *2008* |while read fic
do
mv "$fic" 2008
done |
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
find . -name "*2008*" -type f -exec mv {} 2008 \;
Ici, chaque fichier (symbolisé par les accolades) sera traité via mv
Partager