Je voudrais ajouter du texte à la fin du nom de fichier mais avant l'extension. En ce moment j'essaye,
for f in *.shp; do echo $f_poly; done
la sortie est,
Quercus_acutifolia.shp_poly
Quercus_agrifolia.shp_poly
Quercus_corrugata.shp_poly
Quercus_cortesii.shp_poly
Quercus_costaricensis.shp_poly
Quercus_havardii.shp_poly
Quercus_hemisphaerica.shp_poly
Quercus_kelloggii.shp_poly
Quercus_knoblochii.shp_poly
Quercus_laceyi.shp_poly
Je veux que ce soit,
Quercus_acutifolia_poly.shp
Quercus_agrifolia_poly.shp
Quercus_corrugata_poly.shp
Quercus_cortesii_poly.shp
Quercus_costaricensis_poly.shp
Quercus_havardii_poly.shp
Quercus_hemisphaerica_poly.shp
Quercus_kelloggii_poly.shp
Quercus_knoblochii_poly.shp
Quercus_laceyi_poly.shp
printf
avec une chaîne de format au lieu du moins portableecho
. 2. J'utilise l'expansion des paramètres qui est plus efficace que d'appeler un binaire externe (basename
) pour une tâche aussi simple.for f in *.shp; do mv $f ${f%.shp}_poly.shp; done
Parfois, un outil appelé "renommer" est installé.
Il n'est peut-être pas portable, mais il est facile à utiliser.
la source
Utilisez ceci:
la source
basename
est plus lente et moins efficace que de laisser le shell faire le travail seul. Cela peut être visible pour un très grand nombre de fichiers.--
s et il échoue pour les noms de fichiers qui ont des caractères de nouvelle ligne avant le.shp
.Cela a mieux fonctionné pour moi:
for f in *; do NEW=${f%.webm}_2016.webm; mv ${f} "${NEW}"; done
la source
for f in *.webm
, vous avez oublié de citer le${f}
et vous manquez un--
.echo
), mais pas celui requis.S'ils se trouvent dans des emplacements différents, exécutez: -
la source
Comme la question est pour
bash
il n'y a pas besoin d'utilitaires externes, car vous pouvez utiliser des expressions rationnelles bash :la source