Forum debian-fr.org

Rechercher:

* Connexion   * M’enregistrer

* FAQ    * Rechercher





Poster un nouveau sujet Répondre au sujet  [ 6 messages ] 
Auteur Message
MessagePosté: 27 Déc 2011 23:05 
Hors ligne
Nouvel utilisateur

Inscription: 18 Juil 2011 09:12
Messages: 26
Bonjour
en bash je sais que l'on utilise test

mais je ne vois pas quel fonction utiliser pour tester qu'une chaine de caractère est un nom de fichier valide sans creer un flux vers celui-ci

merci

_________________
Croconux
debian squeeze noyau linux 3.2


Haut
 Profil  
 
MessagePosté: 28 Déc 2011 17:07 
Hors ligne
Vraiment, particulièrement bavard(e)!
Avatar de l’utilisateur

Inscription: 09 Jan 2007 22:49
Messages: 3462
croconux a écrit:
Bonjour
en bash je sais que l'on utilise test

mais je ne vois pas quel fonction utiliser pour tester qu'une chaine de caractère est un nom de fichier valide sans creer un flux vers celui-ci

merci

salut
man stat
man ls
:114

_________________
pq5 se plus proc 3 ghz 4 go de ram
ssd 1 dd 90 go ext4
nvidia 460
debian squeez 2.6.32 fluxbox 64 bits
Enjoy ;)


Haut
 Profil  
 
MessagePosté: 29 Déc 2011 00:33 
Hors ligne
Modérateur du forum
Avatar de l’utilisateur

Inscription: 18 Juil 2007 17:57
Messages: 6902
Localisation: Grenoble
Je ne crois pas que ce soit ce qu'il cherche, il veut tester si une chaine est un chemin valide pas si les dossiers et/ou fichiers existent.

Pour cela il faut passer par une expression rationnelle mais je ne vois pas d'exemple de chemin invalide (dans les caractères affichables), donc je ne vois pas comment construire d'expression.

_________________
Je suis Pitta, cartésien, irritable, irritant et névrosé (de plus je fais de l'entrisme pour zsh), si l'un de mes messages vous insupporte essayez d'y voir de l'ironie ou de ne pas en tenir compte. Bonne journée et gardez le sourire. :)


Haut
 Profil  
 
MessagePosté: 29 Déc 2011 03:24 
Hors ligne
Vraiment, particulièrement bavard(e)!
Avatar de l’utilisateur

Inscription: 09 Jan 2007 22:49
Messages: 3462
Sa devrait être une norme, donc normalement il suffi de savoir ce qu'il est possible de cree comme nom de fichier et de répertoire. ensuite un filtre fait l'affaire.

_________________
pq5 se plus proc 3 ghz 4 go de ram
ssd 1 dd 90 go ext4
nvidia 460
debian squeez 2.6.32 fluxbox 64 bits
Enjoy ;)


Haut
 Profil  
 
MessagePosté: 08 Jan 2012 21:09 
Hors ligne
Très bavard(e)!
Avatar de l’utilisateur

Inscription: 18 Juil 2007 13:25
Messages: 332
Localisation: Aisne
[ -f "la_chaine" ]
ou
test -f "la_chaine"

pour les fichiers "normaux"

ou -a pour toute sorte de fichier ?

à moins que je n'ai pas compris la question ( cette histoire de flux .. ? )

man bash, puis:
/ -a fichier
[ / ou la commande de recherche dans ton man ]
te donnera la liste des tests sur les fichiers.

exemple: ces 3 syntaxes sont équivalente (ici)
Code:
if [ -f $fichier ] ; then ...

Code:
if [[ -f $fichier ]] ; then ...

Code:
if test -f $fichier ; then ...


Les tests peuvent se combiner:
Code:
if [ -f ${fichierps} -a ! -s ${fichierps} ] ; then
  echo "Effacement du fichier vide ${fichierps}"
  ls -l ${fichierps}
  rm ${fichierps}
fi


[ = debut de la commande test
] = fin de le commande test
-f = $fichier existe et c'est un fichier normal

-a = and

# Fichier vide:
! = négation du test suivant
-s = existe et a une taille strictement positive

Attention: les espaces avant et après les crochets sont parties de la commande test: " [ " et " ] "

Pour un effacement silencieux:
[ -f ${fichierps} -a ! -s ${fichierps} ] && rm ${fichierps}

_________________
Précédent: Carte K7S5A cpu: AMD 1200 MHz Lenny 2.6.26-2-686.

Actuel: Carte EVGA Classified SR-2, 2 cpu "Intel Xeon CPU X5672 3.20GHz"
mem: 8 x "2GiB DIMM 1333 MHz", 4 ddurs "1TB SAMSUNG HD103SJ"
Squeeze 2.6.32-5-amd64.


Haut
 Profil  
 
MessagePosté: 26 Jan 2012 23:24 
Hors ligne
Très bavard(e)!
Avatar de l’utilisateur

Inscription: 30 Aoû 2008 18:33
Messages: 359
Localisation: fr
MisterFreez a écrit:
Je ne crois pas que ce soit ce qu'il cherche, il veut tester si une chaine est un chemin valide pas si les dossiers et/ou fichiers existent.

Pour cela il faut passer par une expression rationnelle mais je ne vois pas d'exemple de chemin invalide (dans les caractères affichables), donc je ne vois pas comment construire d'expression.


Effectivement, on peut mettre n'importe quel caractère dans un nom de fichier (ou de répertoire) à l'exception du caractère slash / et du caractère nul (code ASCII : 0).

Or, croconux veut analyser un chemin, donc le caractère slash ne doit pas être rejeté. Donc il ne faut rejeter la chaîne que si elle contient le caractère nul :

Code:
#on stocke un chemin à tester dans le fichier "chemin.txt"
cat /dev/urandom | head -c 100 > chemin.txt

#on teste si le chemin contient le caractère nul
cat chemin.txt | od -tu1 -w1 -An | grep -qx ' *0 *'

#on affiche le résultat du test
if [ $? -eq 0 ]; then
  echo le chemin n est pas valide
else
  echo le chemin est valide
fi

_________________
Acheter des jeux vidéos OpenGL, c'est un grand pas pour le Libre.
programming and algorithms & ethalamus & debian gnu/hurd


Haut
 Profil  
 
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 6 messages ] 

Index du forum » Divers » Programmation


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages
Vous ne pouvez pas joindre des fichiers

Aller à:  
Flux RSS Flux RSS Liste des flux Liste des flux
Powered by phpBB® Forum Software © phpBB Group
Traduction par: phpBB-fr.com
SEO
[ Time : 0.243s | 11 Queries | GZIP : Off ]