Ok, j'ai un tas de fichiers commençant par un tiret, -. Ce qui n'est pas si bon ... et je veux les renommer. Dans mon cas particulier, je voudrais juste mettre un personnage devant eux.
J'ai trouvé la ligne suivante qui devrait fonctionner, mais à cause de cela, elle ne fonctionne pas:
for file in -N*.ext; do mv $file x$file; done
Si je mets un echo
devant le mv
je reçois un tas de
mv -N1.ext x-f1.ext
mv -N2.ext x-f2.ext
Ce qui est correct, sauf que bien sûr, il pensera que le premier nom de fichier est des options. Donc, quand je retire le echo
et l'exécute, je reçois juste un tas de
mv: illegal option -- N
J'ai essayé de le changer en
for file in -N*.ext; do mv "$file" "x$file"; done
mais les citations sont simplement ignorées, semble-t-il. J'ai essayé d'utiliser des guillemets simples, mais la variable n'a pas été développée ... Que dois-je faire ici?
Mise à jour: J'ai maintenant également essayé de citer les citations. Comme ça:
for file in -N*.ext; do mv '"'$file'"' '"'x$file'"'; done
Et quand je fais écho, ça a l'air correct, mais quand je le lance, je reçois juste
mv: rename "-N1.ext" to "x-n1.ext":: No such file or directory
Je n'ai aucune idée de comment faire ça maintenant ... soupir
Réponses:
Vous devez utiliser le mot clé
--
pour indiquer à la commande mv que les arguments ne doivent pas être interprétés comme des options. Regarder:Utilisez
--
après toutes les options de la ligne de commande. Par exemple, si vous essayez d'utiliser l'-i
option mv , cela irait avant--
:la source
./
devant le nom de fichier, ce qui fonctionnerait. Mais c'est bien sûr une option encore plus soignée :)./
. mais vous avez raison, cela fonctionne aussi pour cette situation.--
signification ne traite pas d'autres arguments car les options sont une convention et ne sont pas respectées par tous les programmes. Certains utilisent un seul-
pour cela, et certains n'acceptent rien à cette fin. Il./
est donc important de garder à l'esprit la prépension .--
comme argument spécial est une extension GNU, mais elle est mentionnée dans les directives POSIX. voir section 12.2, directive 10: opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html ... cela signifie que vous pouvez vous attendre à ce que la plupart des utilitaires POSIX et GNU respectent la convention, mais d'autres non.Une autre technique consiste à inclure le répertoire parent avec le nom de fichier ...
Pour renommer le fichier '-file-to-rename' en 'file-to-rename' ...
Merci @Skippy le Grand Gourou. Confirmé que ./-file-to-rename fonctionne avec
mv
etrm
comme dans ...la source
./
.