Bonjour,
je voudrais savoir comment créer un fichier bash (#!/bin/bash) qui va lister les fichiers du répertoire dans lequel il est situé.
Merci de votre aide.
Bonjour,
je voudrais savoir comment créer un fichier bash (#!/bin/bash) qui va lister les fichiers du répertoire dans lequel il est situé.
Merci de votre aide.
Hello !
A priori, code:
A part si tu veux uniquement les fichiers et non répertoires, sinon il faut préciser un paramètre.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 #!/bin/bash ls
voire :
pour mettre dans un fichier texte.
Code : Sélectionner tout - Visualiser dans une fenêtre à part ls >fichier.txt
Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
Mon article sur le P2V, mon article sur le cloud
Consultez nos FAQ : Windows, Linux, Virtualisation
Salut et merci de ta reponse.
En faite, pour chaque fichier du répertoire je veux copier les fichiers ayant une DATE supérieur au jour J-1 dans un autre fichier .
Exemple: aujourd’hui 5 mai bah avec mon script je veux récupérer tous les nouveaux fichier qui ont une date supérieur au 4 MAI et les copier dans un fichier avec un nom lambda
Bonjour,
Les réponses à la question initiale sont fausses: elles listent les fichiers du répertoire depuis lequel on exécute la commande et non les fichiers se trouvant dans le répertoire de la commande elle-même
-Je laisse N_BaH argumenter sur le fait d'utiliser ls...
-Pose ton problème en entier, la première demande n'a rien à voir avec la 2ème...
Et es-tu sure de vouloir mettre plusieurs fichier dans un seul fichier (c'est ce que tu demandes dans la 2ème question) ?
Cordialement.
1) Créé un fichier Bash qui va lister les fichier dans mon répertoire.
2) Pour chaque fichier du répertoire afficher la date de dernière modif.
3) Pour chaque date regarder ceux modifié depuis la date d'hier ou + et qui n'a pas encore ete mis dans le fichier "a send" (voir etape 4)
4) Copier les fichier ayant une date de modif supérieur a la date J-1 dans un autre repertoire ( un dossier que je vais apl "a send"
En gros le but est de mettre tout les nouveautés dans le fichier "a send"
Merci a vous tous .
Je bloque vraiment x)
ce script fonctionne , mais n'est pas optimisé. Je ne souhaite copier que les images donc (jpg, jpeg, png, gif etc..)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 #!/bin/bash ls -l find . -mtime -1 -exec cp {} to_send/ \;
Bonjour,
bien sûr, si le seul but du script était de lister les fichiers du répertoire courant, on pourrait utiliser ls...
mais
ON N'UTILISE PAS ls DANS UN SCRIPT !!!
ou au moins on n'essaie même pas d'en parcourir la sortie, parce que les noms de fichiers peuvent contenir des caractères qui interfèrent avec l'IFS (espace, tabulation, saut de ligne).
ce que tu veux faire est parfaitement réalisable dans une seule commande find.
chaque message apporte un petit ajout au cahier des charges, c'est pénible !
je propose ceci pour confirmer que c'est faisable en une seule commande find :des objections ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part find ./ -path ./to_send -prune -o -type f -regex '.*\(jpe*g\|png\|gif\)' -printf '%p %Tx %TX\n' -mtime -1 -exec echo " cp -n {} ./to_send" \;
à charge pour l'initiateur du sujet de trouver la signification de chaque option pour convaincre son prof. que, si il ne l'a pas trouvée seul, il a bien compris cette commande.
Pour être franc, je dois juste faire de l'auto formation sur bash .
Cette consigne n'a pas été donné par un prof mais par moi même, je voulais voir comment sa fonctionne .
Avant de lire ta réponse j'en étais a la.
Je dois dire que je suis encore un peu perdu mais bash sera nécessaire dans mon travail.
Code : Sélectionner tout - Visualiser dans une fenêtre à part find . -mtime -1 -exec cp {} to_send/ -type f \( -name "*.png" -or -name "*.jpg" -or -name "*.gif"\) \;
Merci de votre aide si vous voulez me donner des info pour mon auto formation je suis preneur
Amicalement,
La commande de N_bah est à mon avis complexe pour toi, mais ce sera un excellent exercice de la comprendre.
Elle est efficace dans le sens ou elle utilise la ligne de commande et notamment la commande find de façon optimale.
A ton niveau, essayes d'arriver à un résultat même sur plusieurs lignes.
Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
Mon article sur le P2V, mon article sur le cloud
Consultez nos FAQ : Windows, Linux, Virtualisation
Comme le dit chrtophe, la commande de N_BaH est complexe pour un débutant surtout quand ça concerne la commande find...
La plupart des commandes se fichent plus ou moins de l'ordre dans lequel on leurs fournit les options, ce qui n'est pas le cas de la commande find, par exemple, tu n'obtiendras pas le même résultat entre:
et
Code : Sélectionner tout - Visualiser dans une fenêtre à part find . -mtime -1 -exec cp {} to_send/ \; -type f \( -name "*.png" -or -name "*.jpg" -or -name "*.gif"\)
Dans le premier cas, -exec ... sera effectué avant le -type ....
Code : Sélectionner tout - Visualiser dans une fenêtre à part find . -mtime -1 -type f \( -name "*.png" -or -name "*.jpg" -or -name "*.gif"\) -exec cp {} to_send/ \;
Par contre, tu peux réaliser ton besoin sans la commande find, via la commande stat et un peu de scripting, ce qui peut être tout aussi instructif pour un débutant
Cordialement.
Bonjour
Déjà il ne faut pas confondre "l'endroit où je me trouve quand je lance un script" et "l'endroit où se trouve le script".
- L'endroit où je me trouve, c'est (au choix) .; $(pwd), $PWD ou $(/bin/pwd) (la différence entre $(pwd) et $(/bin/pwd) est minime et ne concerne que les liens symboliques. Si par exemple tu te trouves dans un dossier "x" qui pointe vers (par exemple) "/tmp", la première te donnera "x" et la seconde "/tmp").
- L'endroit où se trouve le script, c'est $(dirname "$0").
Ensuite, pour traiter (par exemple afficher) les fichiers situés dans un répertoire "xxx", la syntaxe est la suivante:
Les guillemets sont important dans le cas où "xxx" est un nom avec des espaces. Mais il faut les enlever pour l'étoile sinon elle n'est pas étendue. Et dans le traitement (ici l'affichage), les guillemets sont importants si le fichier traité est lui-aussi un nom avec des espaces.
Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 for fic in "xxx"/*; do echo "$fic" done
A partir de là, si tu veux suivre l'idée de disedorgue, alors un peu de stat pour récupérer le status du fichier, de cut pour couper les infos de ce status sur ce qui t'intéresse et de if pour faire des choix et c'est réglé...
Mon Tutoriel sur la programmation «Python»
Mon Tutoriel sur la programmation «Shell»
Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
Et on poste ses codes entre balises [code] et [/code]
l'analyse de la ligne de code de @N_BAH fût très enrichissante .
-prune permet d'exclure le répertoire "to_send" de la recherche
-0 = Ou
-type permet de sélectionner uniquement les fichier et grâce a la regex on spécifie que c'est du png jpeg etc....
-printf : '%p %Tx %TX\n' sa reste assez flou je sais que si je l’enlève j'ai pas les "détails" mais je comprend pas la syntaxe .
-mtime -1 permet de precisé que la date doit être inférieur a 1j
-exec cp {} to_send copier c'est fichier dans to_send.
@disedorgue grâce a toi j'ai compris que find est très "sensible a la casse" et qu'il faut bien placer ses actions.
Apres je me doute qu'il existe plus d'autre fonction a par find mais dans ce cas la c'est de lui que j'avais besoin et j'ai bien éplucher internet sur lui (enfin sa mérite encore un peu de recherche quand même) .
Maintenant je vais chercher comment ajouter les image a un ZIP qui se trouve dans le dossier to_send et lui donner comme nom la date d'aujourd'hui .
Merci all si vous avez d'autre chose a m'apprendre je suis preneur
PS: http://www.linuxpedia.fr/doku.php/commande/find se lien est pas mal
Il s'agit d'un format d'affichage. Chaque "%" est remplacé par l'élément suivant le "printf" dans l'ordre d'apparition. Exemple printf "%d %x" 123 456 => affichera "123" au format "%d" (décimal) et "456" au format "%x" (hexadécimal)...
Petite précision: on parle de la "mtime" (date de modification). Un fichier possède 3 dates: La "ctime" (date de création ou de modification de son inode (ses caractéristiques)), la "mtime" (date de modification du fichier) et la "atime" (date de dernier accès). Avec un petit bémol pour la "atime" car elle est tellement mise à jour (il suffit de faire un simple ls fic pour que sa atime soit mise à jour) qu'il existe une option dans les montages de partitions pour la désactiver (ce que je fais d'ailleurs). Parce que un truc qui est mis à jour tout le temps c'est comme un chien qui aboie tout le temps => c'est inutile pour monter la garde.
Avec les accolades qui symbolisent le fichier trouvé par find.
Mon Tutoriel sur la programmation «Python»
Mon Tutoriel sur la programmation «Shell»
Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
Et on poste ses codes entre balises [code] et [/code]
Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peut–être qu'il peut être sûr, etc.
Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
Mes 2 cts,
--
jp
Si des fichiers ont une extension avec une casse majuscule (comme .JPG), tu peux demander à "find" de les récupérer avec "iname" au lieu de "name":
Code : Sélectionner tout - Visualiser dans une fenêtre à part find . -mtime -1 -type f \( -iname "*.png" -or -iname "*.jpg" -or -iname "*.gif"\) -exec cp {} to_send/ \;
C'est "noatime" et "nodiratime" (la seconde je ne l'ai vue apparaitre que récemment). Je les mets en tant qu'options dans le fichier "/etc/fstab"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 # <file system> <mount point> <type> <options> <dump> <pass> /dev/sda1 / ext4 noatime,nodiratime,errors=remount-ro 0 1
Mon Tutoriel sur la programmation «Python»
Mon Tutoriel sur la programmation «Shell»
Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
Et on poste ses codes entre balises [code] et [/code]
Perso, je préfère l'option relatime qui est plus propre car avoir une date de modification plus ancienne qu'une date d'accès, c'est louche et d'ailleurs, comme indiqué dans le man, certaines commandes tel que mutt n'apprécient pas.
Cordialement.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager