Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 22/06/2011, à 21:43

Hizoka

[resolu] liste fichier : contraire de */

Bonsoir,

je cherche un moyen de lister uniquement les fichiers à la facon :

for i in */; do echo $i; done
> python/
> Serveur/

qui ne liste que les dossiers.

Donc en partant de :

for i in *; do echo $i; done
> python/
> Serveur/
> free.pdf
> x264.pdf

obtenir :

for i in ???; do echo $i; done
> free.pdf
> x264.pdf

merci de ne pas me proposer find ou ls...

Dernière modification par Hizoka (Le 28/06/2011, à 13:42)


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#2 Le 22/06/2011, à 22:41

Vysserk3

Re : [resolu] liste fichier : contraire de */

Salut,
Je ne sais pas comment faire en bash, mais avec zsh, il suffit d'utiliser :

*(.)

pour lister que les fichiers (et pas les liens ni les dossiers)
Si on veut rajouter les liens, il suffit de faire :

*(.) *(@)

En bash, il y a peut être moyen de s'en sortir avec l'extended globbing ?

Hors ligne

#3 Le 23/06/2011, à 08:14

Sciensous

Re : [resolu] liste fichier : contraire de */

si c'est pour ne lister que les fichiers, il suffirait d'introduire un test :

if [ -f "$i" ]; then echo "$i";fi

antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )

Hors ligne

#4 Le 23/06/2011, à 08:25

johndo

Re : [resolu] liste fichier : contraire de */

Hizoka a écrit :

Donc en partant de :

for i in *; do echo $i; done
> python/
> Serveur/
> free.pdf
> x264.pdf

je suis étonné du retour de cette commande !
une simple * ne devrait pas retourner les / des dossiers hmm

et si c'est vraiment le cas (ce dont je doute - j'en suis même certain mais je n'ai rien sous la main pour vérifier), il suffit d'ajouter une négation dans le pattern :
printf "%s\n" *[!/] (ou printf "%s\n" *[^/])

en fait, dans ce que tu souhaites faire, tout le problème est là... c'est que bash ne retourne pas le / pour les dossiers sauf si tu le lui demandes explicitement. il n'est donc pas possible de faire ce que tu demandes / souhaites par un simple pattern (même en activant extglob). il faut donc réaliser un test supplémentaire.

Dernière modification par johndo (Le 23/06/2011, à 08:33)

Hors ligne

#5 Le 24/06/2011, à 18:45

Hizoka

Re : [resolu] liste fichier : contraire de */

non ,c'est un erreur de ma part, il n'y a pas les "/", c'était pour vous faire comprendre que c'était les dossier, mais j'aurais mieux fait de ne pas les mettre.

désolé.

en fait je ne peux pas franchement faire de teste, ca serait pour simplifier ce code :

old_IFS="${IFS}" IFS=$'\n'

select fichier in "$(find "${PWD}" -maxdepth 1 -type f)" Exit
do
[[ ${fichier} == Exit ]] && return || break
done

en

select fichier in ?? Exit
do
[[ ${fichier} == Exit ]] && return || break
done

ca m'eviterait de modifier l'IFS...

ca passe tres bien avec * et */

Dernière modification par Hizoka (Le 24/06/2011, à 19:03)


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#6 Le 25/06/2011, à 12:20

Postmortem

Re : [resolu] liste fichier : contraire de */

Salut,
Pour éviter d'avoir à faire IFS="${old_IFS}" après, tu pourrais modifier IFS juste pour le select comme ceci :

IFS=$'\n' select fichier in "$(find "${PWD}" -maxdepth 1 -type f)" Exit
do
[[ ${fichier} == Exit ]] && return || break
done

Suis pas sur Linux pour essayer là, mais normalement, comme ceci, l'IFS retrouve sa valeur d'origine après la commande.
Bon, ça permet pas d'enlever le find mais ça fait une 'tite ligne en moins !


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#7 Le 25/06/2011, à 19:06

Hizoka

Re : [resolu] liste fichier : contraire de */

j'avais essayé mais ca ne marche pas :

IFS=$'\n' select fichier in "$(find "${PWD}" -maxdepth 1 -type f)" Exit
Commande « select » non trouvée, vouliez-vous dire :
 La commande « vselect » issue du paquet « via-bin » (universe)
 La commande « dselect » issue du paquet « dselect » (main)
 La commande « qselect » issue du paquet « torque-client » (universe)
 La commande « qselect » issue du paquet « gridengine-client » (universe)
 La commande « qselect » issue du paquet « torque-client-x11 » (universe)
 La commande « iselect » issue du paquet « iselect » (universe)
select : commande introuvable

alors que la commande sans l'IFS passe...


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#8 Le 25/06/2011, à 19:21

f.x0

Re : [resolu] liste fichier : contraire de */

et un simple

for i in *.*; do echo $i; done

cela ne va pas ?????????

Si ce n'est pas le cas, désolé, je m'en vais tongue

Dernière modification par f.x0 (Le 25/06/2011, à 19:23)


SOPI

Hors ligne

#9 Le 25/06/2011, à 19:30

Hizoka

Re : [resolu] liste fichier : contraire de */

non c'est pas bon, ca cherche des fichiers conteant un point dans leur nom... en effet ça pourrait être bien pour les fichiers avec extensions, perso, j'en mets pas...


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#10 Le 26/06/2011, à 13:38

Postmortem

Re : [resolu] liste fichier : contraire de */

Hizoka a écrit :

j'avais essayé mais ca ne marche pas :

Salut !
Ah, désolé... Ca m'apprendra à poster des trucs sans tester !
Par contre, quand j'essaie ta commande, j'obtiens ceci :

$ old_IFS="${IFS}" IFS=$'\n'
$ select fichier in "$(find "${PWD}" -maxdepth 1 -type f)" Exit
do
[[ ${fichier} == Exit ]] && return || break
done
1) /home/ubuntu/test/fichier05
/home/ubuntu/test/fichier04
/home/ubuntu/test/fichier03
/home/ubuntu/test/fichier02
/home/ubuntu/test/fichier01
2) Exit
#?

Tu n'attends pas plutôt un truc du genre :

1) /home/ubuntu/test/fichier05
2) /home/ubuntu/test/fichier04
3) /home/ubuntu/test/fichier03
4) /home/ubuntu/test/fichier02
5) /home/ubuntu/test/fichier01
6) Exit
#?

Si c'est le cas, ça fonctionne avec ça, sans modifier l'IFS :

$ set $(find "${PWD}" -maxdepth 1 -type f) Exit
$ select fichier
do
[[ ${fichier} == Exit ]] && return || break
done
1) /home/ubuntu/test/fichier05    4) /home/ubuntu/test/fichier02
2) /home/ubuntu/test/fichier04    5) /home/ubuntu/test/fichier01
3) /home/ubuntu/test/fichier03    6) Exit
#?

Mais c'est vrai qu'une petite expansion à la zsh, comme l'a indiquée Vysserk3, aurait été nickel !

Edit : Inclusion du « Exit » directement dans la commande set

Dernière modification par Postmortem (Le 26/06/2011, à 15:21)


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#11 Le 26/06/2011, à 19:10

Hizoka

Re : [resolu] liste fichier : contraire de */

pas mal le coup du set, mais ca ne passe pas avec les espaces.
pour que ça passe, il faut encore modifier l'IFS.

select fichier in "$(find "${PWD}" -maxdepth 1 -type f)" Exit
=>
select fichier in $(find "${PWD}" -maxdepth 1 -type f) Exit

desole, c'est une erreur de recopiage.


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#12 Le 26/06/2011, à 22:41

gerarmentor

Re : [resolu] liste fichier : contraire de */

Je ne connais pas de solution avec le globbing bash, même étendu.

En général, sans changer l'IFS, j'utilise le couple "find" et  "while read".
Par exemple, en stockant dans un tableau :

#!/bin/bash
while read -rd $'\0' i ; do fichiers+=("$i") ; done < <(find -maxdepth 1 -type f -print0)

select i in "${fichiers[@]}" Exit
do 
    [[ "$i" == Exit ]] && exit || break
done

On ne peut pas dire que ça simplifie les choses... mais c'est une solution solide.

Dernière modification par gerarmentor (Le 26/06/2011, à 22:42)

Hors ligne

#13 Le 26/06/2011, à 23:50

Pylades

Re : [resolu] liste fichier : contraire de */

Salut,
+1 pour while read ; tu pourrais avoir ça :

while read f; do echo ${f#./}; done < <(find -maxdepth 1 -type f)

pour n’avoir que les fichiers réguliers.


Et remarque qui ne sert à rien : plutôt que

for i in */; do echo $i; done

on peut plus simplement faire

ls -d */

:P


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#14 Le 27/06/2011, à 00:16

gerarmentor

Re : [resolu] liste fichier : contraire de */

Πυλάδης a écrit :

Salut,
+1 pour while read ; tu pourrais avoir ça :

while read f; do echo ${f#./}; done < <(find -maxdepth 1 -type f)

A noter que j'ai pris soin d'ajouter deux options à "read" : -r et -d $'\0'
Il est plus prudent de les utiliser car les chemins de fichiers peuvent très bien contenir des backslashs ou des sauts de ligne, mais pas le caractère null (\0).

Hors ligne

#15 Le 27/06/2011, à 09:03

Hizoka

Re : [resolu] liste fichier : contraire de */

ouais, reste à voi ce qui est le plus rapide ou le mieux entre le changement de l'ifs et une boucle while read...


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#16 Le 27/06/2011, à 12:22

johndo

Re : [resolu] liste fichier : contraire de */

@Πυλάδης roll
Si Totor et sputnick passeraient par là, tu serais illico presto sur la liste des vainqueurs des golden award Useless Use Of Ls

comme indiqué plus haut : pas de boucle, pas de ls pour afficher une simple liste de fichier. Un simple printf suffit.

@gerarmentor
de même, pour alimenter un tableau :

IFS=$'\0' tab=( $(find ... -print0 ) )

==> pas de boucle
(les antislash sont conservés)

Dernière modification par johndo (Le 27/06/2011, à 14:25)

Hors ligne

#17 Le 27/06/2011, à 14:35

AnsuzPeorth

Re : [resolu] liste fichier : contraire de */

johndo a écrit :

Si Totor et sputnick passeraient par là

Ehhh ouais, mais ils ne passeront plus, Totor c'est fait rentrer dans les plumes (aucune reconnaissances envers son temps passé à nous aider) et il en a eu marre, spunick, il ne post plus non plus !, vraiment dommage .... Enfin baste ...

@Hizoka
Tu y a surmenet déjà pensé, même si ça n'est pas infaillible (cela dépends de tes besoins), un *.* matche les noms avec un point, donc un fichier avec extension.


Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script  (Hors ligne)

Hors ligne

#18 Le 27/06/2011, à 17:05

Hizoka

Re : [resolu] liste fichier : contraire de */

Merde, je savais pas pour totor...
c'est une tres grosse perte...
j'avais remarqué pour spunick.... ca c'est trop nul...

ouais je sais ansuz, le probleme, c'est que tous mes fichiers n'en ont pas tongue

johndo :

IFS=$'\0' tab=( $(find "${PWD}" -maxdepth 1 -type f -print0 ) )
echo "${tab[1]}"
=> 

perso ca ne me crée qu'une variable normal et non une liste...
et pourquoi cet IFS ?

Dernière modification par Hizoka (Le 27/06/2011, à 17:16)


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#19 Le 27/06/2011, à 17:37

gerarmentor

Re : [resolu] liste fichier : contraire de */

johndo a écrit :

@gerarmentor
de même, pour alimenter un tableau :

IFS=$'\0' tab=( $(find ... -print0 ) )

==> pas de boucle

oui mais non... car IFS=$'\0' ne fonctionne pas... et n'a jamais fonctionné depuis que j'utilise bash.

Par ailleurs, quand on choisit la solution de changer l'IFS, il faut au moins désactiver le globbing.

Hors ligne

#20 Le 27/06/2011, à 18:43

FRUiT

Re : [resolu] liste fichier : contraire de */

Et credenhill ! :'(


Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean

Hors ligne

#21 Le 27/06/2011, à 18:48

Hizoka

Re : [resolu] liste fichier : contraire de */

pas tout compris là...


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#22 Le 27/06/2011, à 18:50

FRUiT

Re : [resolu] liste fichier : contraire de */

Ben y poste plus lui non plus :'(


Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean

Hors ligne

#23 Le 27/06/2011, à 19:11

Pylades

Re : [resolu] liste fichier : contraire de */

johndo a écrit :

@Πυλάδης roll
Si Totor et sputnick passeraient par là, tu serais illico presto sur la liste des vainqueurs des golden award Useless Use Of Ls

comme indiqué plus haut : pas de boucle, pas de ls pour afficher une simple liste de fichier. Un simple printf suffit.

Ben non, pas tout à fait. S’il n’y a pas de répertoire, j’affiche une erreur et pas « */ ». tongue
Et d’ailleurs, je veux bien qu’on parle d’UUOC ou d’UUOE, mais pour ls, n’exagérons tout de même pas…


Pis t’façons, c’était une blague, hein (pas très constructive, j’en conviens) ; le « tongue » n’est pas là que pour décorer.


“Any if-statement is a goto. As are all structured loops.
“And sometimes structure is good. When it’s good, you should use it.
“And sometimes structure is _bad_, and gets into the way, and using a goto is just much clearer.”
                Linus Torvalds – 12 janvier 2003

Hors ligne

#24 Le 27/06/2011, à 19:57

aduxas

Re : [resolu] liste fichier : contraire de */

FRUiT a écrit :

Ben y poste plus lui non plus :'(

Si, regarde son activité, il est bien là.

Hors ligne

#25 Le 27/06/2011, à 21:56

FRUiT

Re : [resolu] liste fichier : contraire de */

Ah oui tiens ! Ban désolé au temps pour moi.

Bon bah j'ai de la lecture, et pardonnez moi monsieur Hill d'avoir douté de votre fidélité ^^

J'avoue que je lis pas énormément de sections dans ce forum.


Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean

Hors ligne