Attribuer des noms de fichiers à une variable du shell
Je suis en train d'écrire un script qui fait quelque chose d'un peu plus sophistiqué que ce que je vais vous montrer, mais je sais que le problème est dans cette partie.
Je veux que chaque nom de la liste de fichiers dans un répertoire à être affectée à une variable (la même variable, un à la fois) par le biais d'un for
boucle, puis faire quelque chose à l'intérieur de la boucle avec ce, voir ce que veux dire:
for thing in $(ls $1);
do
file $thing;
done
Edit: disons que ce scrypt est appelé Scrypt et j'ai un dossier appelé Dossier, et il a 3 fichiers à l'intérieur nommées A,B,C. je veux me montrer sur le terminal au moment où j'écris ceci:
./scrypt Folder
suivantes:
A: file
B: file
C: file
Avec le code que j'ai montré ci-dessus, j'obtiens ceci:
A: ERROR: cannot open `A' (No such file or directory)
B: ERROR: cannot open `B' (No such file or directory)
C: ERROR: cannot open `C' (No such file or directory)
c'est le problème
Oui, la seule chose de mal ici, c'est de casser sur les espaces.
eh bien, il dit de le faire pour chaque fichier: ERREUR: impossible d'ouvrir le fichier " (aucun fichier ou répertoire)
OriginalL'auteur Zasito | 2012-11-22
Vous devez vous connecter pour publier un commentaire.
Une façon est d'utiliser expansion des caractères génériques au lieu de
ls
, par exemple,Cela suppose que
$1
est le chemin d'accès à un répertoire avec des fichiers.Si vous voulez fonctionner uniquement sur la plaine de fichiers, d'ajouter une case à droite après
do
le long des lignes de:$1
est un dossier.que serait assing nom de dossier nom de fichier, j'ai besoin de donner le nom des fichiers dans le répertoire de nom de fichier.
Non, ce serait céder à son tour le chemin d'accès complet aux fichiers dans ce répertoire. Si vous avez besoin seulement le nom de fichier, vous pouvez utiliser
basename "$filename"
pour extraire juste le nom du fichier sans le chemin d'accès.(Essayez avec
echo
que la commande pour voir.)Si je remplace ce sur la chose, j'ai écrit sur la question, il va me montrer sur le terminal: $1: répertoire. Disons que nous avons mis le dossier comme Argument, et il a à l'intérieur de 3 fichiers A, B, C. Quand j'écris ./scrypt dossier que je veux qu'il affiche Un:dossier B:fichier C:fichier, si je mets cela, il ne montre que des dossier: répertoire.
OriginalL'auteur Arkku
http://mywiki.wooledge.org/ParsingLs
Utilisation d'expansion à la place:
Notez les guillemets autour de $filename
OriginalL'auteur Master Chief
C'est un peu difficile de ce que vous essayez d'accomplir, mais vous pouvez faire la même chose avec une fonctionnalité qui existe déjà avec
find
. Ainsi, l'exemple suivant imprime le contenu de chaque fichier dans un dossier:OriginalL'auteur sampson-chen
bien,
je pense que ce que tu voulais dire, c'est que la boucle va afficher les noms de fichiers de la dir.
donc, je le ferais comme ça:
de cette façon, le résultat devrait être (dans le cas de la dir sont 3 fichiers et les noms sont A B C:
OriginalL'auteur ofir.elhayani