Saya ingin menambahkan teks ke akhir nama file tetapi sebelum ekstensi. Saat ini saya sedang mencoba,
for f in *.shp; do echo $f_poly; done
outputnya adalah,
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
Aku menginginkannya,
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
dengan format string bukan yang kurang portabelecho
. 2. Saya menggunakan ekspansi parameter yang lebih efisien daripada memanggil binary eksternal (basename
) untuk tugas yang begitu sederhana.for f in *.shp; do mv $f ${f%.shp}_poly.shp; done
Terkadang ada alat yang disebut "rename" diinstal.
Mungkin tidak portabel tetapi mudah digunakan.
sumber
Gunakan ini:
sumber
basename
lebih lambat dan kurang efisien daripada membiarkan shell melakukan pekerjaannya sendiri. Ini mungkin terlihat untuk jumlah file yang sangat besar.--
s yang hilang dan gagal untuk nama file yang memiliki karakter baris baru sebelum.shp
.Ini bekerja lebih baik untuk saya:
for f in *; do NEW=${f%.webm}_2016.webm; mv ${f} "${NEW}"; done
sumber
for f in *.webm
, Anda lupa mengutip${f}
dan Anda kehilangan--
.echo
), tetapi bukan yang diperlukan.Jika mereka berada di lokasi yang berbeda maka jalankan: -
sumber
Karena pertanyaannya adalah untuk
bash
tidak perlu utilitas eksternal, karena Anda dapat menggunakan bash regexps :sumber