Chciałbym dodać tekst na końcu nazwy pliku, ale przed rozszerzeniem. Teraz próbuję
for f in *.shp; do echo $f_poly; done
wynik jest,
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
Chcę, żeby tak było
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
z ciągiem formatu zamiast mniej przenośnegoecho
. 2. Używam rozszerzenia parametrów, które jest bardziej wydajne niż wywołanie zewnętrznego pliku binarnego (basename
) dla tak prostego zadania.for f in *.shp; do mv $f ${f%.shp}_poly.shp; done
Czasami jest zainstalowane narzędzie o nazwie „zmiana nazwy”.
Może nie być przenośny, ale jest łatwy w użyciu.
źródło
Użyj tego:
źródło
basename
jest wolniejsze i mniej wydajne niż pozwolenie powłoce na samodzielne wykonanie pracy. Może to być zauważalne w przypadku bardzo dużej liczby plików.--
s, a nazwy plików, które mają znaki nowej linii przed.shp
.To działało dla mnie lepiej:
for f in *; do NEW=${f%.webm}_2016.webm; mv ${f} "${NEW}"; done
źródło
for f in *.webm
, zapomniałeś zacytować${f}
i brakuje--
.echo
), ale nie wymaganą.Jeśli znajdują się w różnych lokalizacjach, uruchom:
źródło
Ponieważ pytanie brzmi,
bash
nie ma potrzeby używania zewnętrznych narzędzi, ponieważ można użyć wyrażeń regularnych bash :źródło