J'ai du mal à maîtriser les bases des scripts Bash. Voici ce que j'ai jusqu'à présent:
#!/bin/bash
FILES="/home/john/my directory/*.txt"
for f in "${FILES}"
do
echo "${f}"
done
Tout ce que je veux faire, c'est lister tous les .txt
fichiers en for
boucle pour pouvoir faire des trucs avec eux. Mais l'espace dans le my directory
et l'astérisque *.txt
ne jouent tout simplement pas bien. J'ai essayé de l'utiliser avec et sans guillemets, avec et sans accolades sur les noms de variables et je ne peux toujours pas imprimer tous les .txt
fichiers.
C'est une chose très basique, mais je continue de me battre parce que je suis fatigué et que je ne peux pas penser correctement.
Qu'est-ce que je fais mal?
J'ai réussi à appliquer le script ci-dessus si mes FICHIERS n'ont pas d'espace ou d'astérisque ... J'ai dû expérimenter avec ou sans l'utilisation de guillemets doubles et d'accolades pour le faire fonctionner. Mais au moment où j'ai à la fois des espaces et un astérisque, ça gâche tout.
for f in "$DIR"/*.txt
= finefor f in "$DIR/*.txt"
= breaksBien que l'utilisation de tableaux comme indiqué par John1024 soit beaucoup plus logique, ici, vous pouvez également utiliser l'opérateur split + glob (en laissant une variable scalaire sans guillemets).
Puisque vous ne voulez que la partie glob de cet opérateur, vous devez désactiver la partie scindée :
la source
Ce que vous pouvez faire est de ne laisser que les caractères génériques en dehors des guillemets.
Quelque chose comme:
un dans « fichiers avec des espaces » * «txt »
ne le
traitement de
fait
Si les wildcards eux - mêmes se dilatent à des espaces, alors vous aurez besoin d' utiliser un fichier t approche par ligne, comme l' utilisation ls -l pour générer la liste des fichiers et utilisez bash read pour obtenir chaque fichier.
la source
Lorsque vous souhaitez traiter sur un ensemble de fichiers, vous considérez que leur nom peut contenir de l'espace ou un autre code scape, donc avant de démarrer votre processus tel que
for loop
oufind command
définissez leIFS bash env variable
sur:la source