GNT sans publicité, site mobile, fonctionnalitées exclusives...

Comportement de ls

Le
dominique
Bonsoir,
Comme je n'ai pas d'imprimante, « j'imprime » mes documents en .ps puis
je les passe à ps2pdf14. Tout fonctionne bien.
Par fainéantise, je ne mets pas toujours l'extension .ps.
Mon répertoire, après ps2pdf14, me donne ceci :

[normal@localhost Temp]$ ls -l
total 14840
-rw-rw-r-- 1 normal normal 285119 nov 25 20:33 bellanger
-rw-rw-r-- 1 normal normal 29077 nov 25 20:33 bellanger.pdf
-rw-rw-r-- 1 normal normal 286260 nov 25 20:32 isolba
-rw-rw-r-- 1 normal normal 29483 nov 25 20:32 isolba.pdf
-rw-rw-r-- 1 normal normal 14527243 nov 16 07:27 UR054g.zip

Je cherche à isoler les fichiers sans extension. man ls m'indique
l'option -I motif.
Je fais donc ls -laI *.* afin d'ignorer les fichiers qui ont un point
dans leur nom. Mais le résultat n'est pas celui attendu :

[normal@localhost Temp]$ ls -laI *.*
-rw-rw-r-- 1 normal normal 29483 nov 25 20:32 isolba.pdf
-rw-rw-r-- 1 normal normal 14527243 nov 16 07:27 UR054g.zip

Curieusement, j'obtiens des fichiers avec un point mais pas tous
Je dois me tromper avec le motif. Quelle serait la bonne solution pour
n'afficher que les fichiers sans extension ?
Question subsidiaire, comment utiliser rm pour n'effacer que ces
fichiers sans extension ?
Je peux certes le faire fichier par fichier ou les lier avec ls
bellanger isolba mébon

Merci et bonne soirée,
Dominique
Lire les 9 réponses

Questions / Réponses high-tech
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Nicolas George
Le #1862848
dominique wrote in message
[ Temp]$ ls -laI *.*


Le *.* est développé par le shell, et c'est la liste des fichiers résultante
qui est passée à ls.

Question subsidiaire, comment utiliser rm pour n'effacer que ces
fichiers sans extension ?


chsh -s /bin/zsh
exec zsh
setopt extendedglob
rm *~*.*

lhabert
Le #1862847
Nicolas George :

dominique wrote in message
[ Temp]$ ls -laI *.*


Le *.* est développé par le shell, et c'est la liste des fichiers résultante
qui est passée à ls.


Et donc il faut protéger le « *.* » de la sorte :

ls -laI '*.*'

Question subsidiaire, comment utiliser rm pour n'effacer que ces
fichiers sans extension ?



for f in *; do case $f in *.*) ;; *) rm -- "$f";; esac; done

find . -maxdepth 1 '!' -name '*.*' -print0 | xargs -0 rm


dominique
Le #1862846
dominique wrote in message
[ Temp]$ ls -laI *.*


Le *.* est développé par le shell, et c'est la liste des fichiers résultante
qui est passée à ls.


Logiquement, la liste ne devrait pas retenir les fichiers avec un point
grâce à -I, non ?



Question subsidiaire, comment utiliser rm pour n'effacer que ces
fichiers sans extension ?


chsh -s /bin/zsh


Changement de shell

exec zsh


?

setopt extendedglob
rm *~*.*


Est-ce que tu pourrais m'expliquer ces lignes ? Je ne connais pas du
tout zsh. De toutes les manières, il n'est apparemment pas installé...
Merci et bonne soirée,
Dominique


lhabert
Le #1862845
dominique :

dominique wrote in message
[ Temp]$ ls -laI *.*


Le *.* est développé par le shell, et c'est la liste des fichiers résultante
qui est passée à ls.


Logiquement, la liste ne devrait pas retenir les fichiers avec un point
grâce à -I, non ?


On reprend :
- tu tapes la commande

ls -laI *.*

- le shell la découpe en trois éléments :
ls
-laI
*.*

- je saute quelques étapes qui n'ont pas d'importance ici.

- pour chaque élément, le shell regarde si il contient des étoiles (et
d'autres caractères spéciaux), et si oui, remplace cet élément par la liste
des fichiers qui matchent ce motif. Tu te retrouves donc avec :

ls
-laI
bellanger.pdf
isolba.pdf
UR054g.zip

- enfin, le shell exécute ls, avec les éléments suivants de la liste en
argument. ls voit donc que le motif que tu lui demandes d'éviter est
« bellanger.pdf », puis il voit deux arguments « isoalba.pdf » et
« UR05g.zip », qu'il t'affiche tous les deux puis qu'il y a bien des
fichiers portant ces noms, et que ce ne sont pas des répertoires (dans ce
cas, il t'afficherait leur contenu).



dominique
Le #1862824

- le shell la découpe en trois éléments :
ls
-laI
*.*

- je saute quelques étapes qui n'ont pas d'importance ici.

- pour chaque élément, le shell regarde si il contient des étoiles (et
d'autres caractères spéciaux), et si oui, remplace cet élément par la liste
des fichiers qui matchent ce motif. Tu te retrouves donc avec :

ls
-laI
bellanger.pdf
isolba.pdf
UR054g.zip

- enfin, le shell exécute ls, avec les éléments suivants de la liste en
argument. ls voit donc que le motif que tu lui demandes d'éviter est
« bellanger.pdf », puis il voit deux arguments « isoalba.pdf » et
« UR05g.zip », qu'il t'affiche tous les deux puis qu'il y a bien des
fichiers portant ces noms, et que ce ne sont pas des répertoires (dans ce
cas, il t'afficherait leur contenu).


J'ai, du shell, une vision prismée, pur enfant du basic que je suis
(premières lignes de code sur un Sharp PC 1211 vers 1982) et premières
lignes en GWbasic en 1986...
Pourquoi, très précisément, si je demande d'exclure les fichiers avec un
point, le shell ne m'affiche que ceux-là ? En ce cas, il m'aurait suffit
de taper :
ls *.*
Et pourquoi j'ai la bonne réponse en protégeant mon motif '*.*'
Les expressions régulières me causent bien des soucis... et ce n'est pas
faute de me dire souvent : « Allez, ce coup-ci, je comprends... »
Dominique,
qui a sans doute la comprenette un peu laborieuse...

Publicité
Suivre les réponses
Poster une réponse
Anonyme