-2
votes

Comment trouver un script shell qui accepte un ou plusieurs arguments et génère une ligne pour chaque argument qui nomme un fichier UTF-8?

Je comprends que je dois utiliser une gamme d'arguments, mais je n'ai aucune expérience. J'utilise Emacs pour mes scripts shell. C'est ce que j'ai jusqu'à présent: xxx


1 commentaires

Rechercher destiné à rechercher le contenu des répertoires (sous-répertoires et sous-billets et substituts, etc.). Voulez-vous vraiment faire cela ou simplement vérifier les fichiers passés comme des arguments?


3 Réponses :


-1
votes

juste boucle sur les arguments avec un pour xxx


1 commentaires

Utilisation des références de variable * et non cotées (comme $ f ) entraînera des problèmes avec des noms de fichiers contenant des espaces blancheurs et / ou des caractères génériques (qui sont tous deux parfaitement légaux dans les noms de fichiers UNIX). Utilisez "$ @" et "$ f" à la place.



0
votes

Je ne comprends pas pourquoi vous voulez utiliser $ @ (chaque paramètre), mais je résoudrais votre problème comme suit: xxx pré>

Recherchez tous les fichiers (y compris des fichiers binaires), filtre Shell Scripts avec Grep et prenez uniquement le nom du fichier avec SED: P>

if [ -x $i ]; then
    #do something
fi


4 commentaires

Merci! Nous utilisons Emacs parce que mon professeur a littéralement aidé le code LOL.


Je t'en prie. Il devrait être possible de supprimer "SED" et d'utiliser l'option "-L" de "grep", mais je ne peux pas le faire fonctionner. Si le code ne fonctionne pas, vérifiez la sortie de "Rechercher" sans Grep et SED et modifier le modèle Grep "Script" en conséquence. Bonne chance!


Selon la description, il est censé vérifier les fichiers passés sous forme d'arguments, pas la recherche du répertoire actuel (et de ses sous-répertoires). De plus, vous utilisez un tas de techniques qui échouent sur des fichiers avec des espaces et / ou des caractères génériques dans les noms. Voir Bashfaq # 20 pour des moyens plus robustes de le faire (si, en effet, c'est ce qui a besoin de faire ).


@Gordondavisson J'ai interprété la question différemment. Cependant, vous êtes correct sur le bogue. J'aurais dû joindre la variable $ i avec des guillemets doubles.



1
votes

réponse parce que je ne peux pas encore commenter:

"$ @" et "$ {nom [@]}" doit toujours utiliser avec des citations doubles environnantes. Sinon, les mots avec des espaces sont cassés. Voir "Man Bash" pour plus de détails.


0 commentaires