ファイル名拡張子の前にテキストを追加する

ファイル名拡張子の前にテキストを追加する

ファイル名の終わりに、拡張子の前にテキストを追加したいと思います。今は作業中です。

for f in *.shp; do echo $f_poly; done

出力は次のとおりです

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

それを願っています。

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

答え1

使用標準POSIXパラメータ拡張:

for f in *.shp; do printf '%s\n' "${f%.shp}_poly.shp"; done

答え2

時には「名前の変更」というツールがインストールされます。

rename 's/\.shp$/_poly.shp/' *shp

携帯できないかもしれませんが、使いやすいです。

答え3

質問はbash使えるので外部ユーティリティは必要ないのでバッシュ正規表現:

for f in *.shp
do
    mv -v "${f}" "${f%.*}_MYSUFFIX.${f##*.}"
done

❗️警告する:for f in *.extはいいいえスペース、引用符、またはその他の予約文字を含むファイル名が破損するため、信頼できます。安全なアプローチは、次のものを使用することですfind . -iname '*.shp' -exec sh -c 'mv -v "${1}" "${1%.*}_MYSUFFIX.${f##*.}"' _ {} \;。再帰巡回が不要な場合は、次を追加します。-maxdepth 1

答え4

これは私にとってうまくいきます。

for f in *; do NEW=${f%.webm}_2016.webm; mv ${f} "${NEW}"; done

関連情報