Je me demande s’il existe un moyen de renommer un large éventail de fichiers trouvés à l’aide de modèles génériques. Par exemple, disons que je veux scp
tous les fichiers qui correspondent à un certain modèle, mais ajoutent une chaîne aux noms de fichiers à un moment donné. Quelque chose comme ça:
ÉLOIGNÉ:
hello.txt
help.txt
heroes.txt
JE VEUX LOCALEMENT:
hello_copy.txt
help_copy.txt
heroes_copy.txt
Évidemment scp user@remote_host:~/he*.txt ./he*_copy.txt
ne fonctionne pas. Je me demande si cela est possible ou si je dois copier chaque fichier individuellement.
Idéalement, je recherche une solution qui fonctionne tout au long de la session, de sorte que je puisse faire la même chose avec mv
, cp
, etc.
mv
les sortir avec le nouveau nom.Réponses:
Malheureusement, les wildcards sont assez limités. Mais cela peut être fait avec quelques commandes supplémentaires. Tout d'abord, vous pouvez parcourir les fichiers avec un
for
:Vous pouvez également faire un filtrage initial en utilisant
*.txt
au lieu de juste*
. Assurez-vous de citer la variable pour empêcher les espaces ou les caractères spéciaux dans les noms de fichiers de casser la commande.Maintenant vous pouvez remplacer une chaîne par une autre avec
sed
(la barre oblique inverse est nécessaire parce que le point a une signification spéciale sans elle, et le signe dollar après cela signifie "fin de chaîne"):Vous pouvez facilement transformer cela en une commande . Par exemple un
mv
(voyons d’abord comment ça a l'air de faire un extraecho
):Tout semble bon alors faisons-le pour de vrai maintenant:
Vous pouvez même annuler le renommage en utilisant
sed s/_copy\.txt$/.txt/
:-)la source