Je suis en train d'écrire une fonction qui va changer l'extension pour tous les fichiers correspondant dans le répertoire courant:Comment utiliser argv avec un caractère générique?
function chext
if count $args -eq 2 > /dev/null
for f in (ls *$argv[1])
mv (basename $f $argv[2]) (basename $f $argv[1])
end
else
echo "Error: use the following syntax"
echo "chext oldext newext"
end
end
Je continue à obtenir cette sortie si:
(*master) λ chext markdown txt
No matches for wildcard '*$argv[1]'. (Tip: empty matches are allowed in 'set', 'count', 'for'.)
~/.config/fish/config.fish (line 1): ls *$argv[1]
^
in command substitution
called on line 60 of file ~/.config/fish/config.fish
in function 'chext'
called on standard input
with parameter list 'markdown txt'
Je sais qu'il doit y avoir un moyen d'interpoler la variable et de garder *
en tant que caractère générique, mais je ne peux pas le comprendre. J'ai essayé d'utiliser (string join '*' $argv[1])
, mais il a transformé le caractère générique en une chaîne.
J'ai eu ce à presque travail:
function chext
if count $args -eq 2 > /dev/null
for f in (ls (string join * $argv[1]))
mv (basename $f $argv[2]) (basename $f $argv[1])
end
else
echo "Error: use the following syntax"
echo "chext oldext newext"
end
end
Il a supprimé les extensions de tous mes fichiers, mais ne pas ajouter le nouveau, puis m'a donné une erreur qui était du fichier les noms sont combinés et le nom de fichier est trop long.
MISE À JOUR:
Je suis sûr qu'il ya un moyen d'obtenir le travail ls
correct, mais je n'obtenir ce travail avec succès:
if count $args -eq 2 > /dev/null
for f in (ls)
mv $f (string replace -r \.$argv[1]\$ .$argv[2] (basename $f))
end
else
echo "Error: use the following syntax"
echo "chext oldext newext"
end
end
Wow, merci beaucoup de passer le temps de passer par ces problèmes! J'ai trouvé les portions 'ls' et' basename' dans un autre post SO et essayé de les utiliser, mais comme vous pouvez le voir, cela n'a pas fonctionné. Je suis content de voir que la solution que j'avais ajoutée à ma question, qui utilise le remplacement de chaîne, était la bonne. Merci encore! – Brandon