Je devrais faire écho uniquement aux noms de fichiers ou de répertoires avec cette construction:
ls -Al | while read string
do
...
done
ls -Al
sortie:
drwxr-xr-x 12 s162103 studs 12 march 28 12:49 personal domain
drwxr-xr-x 2 s162103 studs 3 march 28 22:32 public_html
drwxr-xr-x 7 s162103 studs 8 march 28 13:59 WebApplication1
Par exemple si j'essaye:
ls -Al | while read string
do
echo "$string" | awk '{print $9}
done
puis ne produire que des fichiers et des répertoires sans espaces. Si le fichier ou le répertoire contient des espaces tels que "domaine personnel", il ne s'agira que du mot "personnel".
J'ai besoin d'une solution très simple. Peut-être qu'il y a une meilleure solution que awk.
linux
command-line
ls
Alex Zern
la source
la source
ls -Al *' '*
?ls
La sortie de l' analyse ne mène à rien de bon.ls -Al | while
. Un moyen simple et plus fiable estfor string in *; do echo "$string"; done
.ls
? L'analyse syntaxiquels
et le "travail dans tout * nix et ne cassera pas si quelque chose s'est passé" ne vont pas bien ensemble.Réponses:
Vous ne devriez vraiment pas analyser la sortie de
ls
. S'il s'agit d'un devoir et que vous y êtes tenu, votre professeur ne sait pas de quoi ils parlent. Pourquoi ne fais-tu pas quelque chose comme ça:Le bon...
ou
...le mauvais...
Si vous voulez vraiment utiliser
ls
, vous pouvez le rendre un peu plus robuste en faisant quelque chose comme ceci:... et le laid
Si vous insistez pour le faire de manière incorrecte et dangereuse et que vous devez simplement utiliser une
while
boucle, procédez comme suit:Sérieusement, ne le faites pas.
la source
drwx------ 2 s162103 studs 3 oct. 9 2012 .ssh drwxr-xr-x 3 s162103 studs 6 oct. 25 09:02 .subversion drwxrwxrwt 3 s162103 studs 3 nov. 15 2012 .TempoItems
Parfois, j'ai rendez-vous sans heure, seulement l'année et le retour gawk sont videsls
.-l
interrupteur quand même? Si tout ce que vous voulez, ce sont les noms de fichiers, lancez simplementls -A
. Utiliser-l
vous rend la vie plus difficile car vous devez maintenant analyser la sortie.ls
n’est tout simplement pas le meilleur moyen d’obtenir ce dont vous avez besoin. Pourquoi ne postez-vous pas une nouvelle question expliquant les informations que vous souhaitez collecter et nous pouvons suggérer des moyens de le faire. Sinon, vous pouvez utiliser votre script tel quel et utiliser l'une des suggestions ci-dessus pour n'imprimer que le nom. Mais sérieusement, ne pas analyserls
, dites-nous exactement ce que vous essayez de faire dans une nouvelle question.Y a-t-il une raison pour laquelle
ls -A1
* ne fonctionnera pas?Par exemple:
* Remarque: il s’agit d’une lettre majuscule A et du numéro un.
la source
Je me demande pourquoi personne n'a mentionné cette commande simple:
la source
sort
empêche le bloc multi-colonnes de devenir une seule colonne?ls
revient àls -1
(sortie à une seule colonne) lorsque sa sortie ne va pas à un terminal (et désactive la citation / remplacement de caractères non imprimables; @Kusalananda, votrels
n'est pas conforme à POSIX s'il le fait toujours).ls
la sortie est déjà triée. Donc, si voussort
le faites, au mieux, vous ne ferez rien, et au pire, modifiez le résultat (si les noms de fichiers contiennent des caractères de nouvelle ligne) ou échouez pour les noms de fichiers qui ne sont pas du texte.ls -a | cat
serait mieux. Ou encore mieuxls -A1
comme déjà mentionné (et parce que vous voulez généralement les remplacements / citations lorsqu'ils sont affichés sur un terminal)ls
se comporte différemment lorsque la sortie n'est pas un terminal.Vous ne pouvez pas analyser la sortie de
ls
, sans parler dels -l
nouvelle ligne, tout comme l'espace est un caractère aussi valide que n'importe quel nom de fichier. En outre, vous devrez considérer les liens symboliques qui ont une sortie telle que... foo -> bar
.Pourquoi voudriez-vous utiliser
-l
quand même si vous ne voulez que le nom du fichier?Il suffit de faire:
Si vous souhaitez inclure des fichiers de points (sauf
.
et..
), en fonction du shell:zsh
:bash
:ksh93
:POSIXly:
la source
Que diriez-vous:
la source
compresser plusieurs espaces en espaces simples avec tr, vous pouvez utiliser couper pour diviser sur les champs
la source
Essayez (
bash
,zsh
,ksh93
syntaxe):Voir également:
ls
? chez unix SEla source
essayez
ls -1
Thats Integer 1De la page de manuel.
la source
il affiche quels fichiers dans quel répertoire.
la source