Test si une chaine de caractere est un fichier

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

[quote=“croconux”]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[/quote]
salut
man stat
man ls
:114

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.

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.

[ -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
[size=85][ / ou la commande de recherche dans ton man ][/size]
te donnera la liste des tests sur les fichiers.

exemple: ces 3 syntaxes sont équivalente (ici)

Les tests peuvent se combiner:

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}

[quote=“MisterFreez”]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.[/quote]

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[/code]