web-dev-qa-db-ja.com

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

ファイル名の最後に、拡張子の前にテキストを追加したいと思います。今、私は試みています、

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
29
Sam007

標準のPOSIXパラメータ展開 を使用:

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

「rename」というツールがインストールされている場合があります。

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

ポータブルではないかもしれませんが、使いやすいです。

7
Chad Clark

これを使って:

for file in *.shp; do echo $(basename $file .shp)_poly.shp; done
5
doneal24

これは私にとってよりうまくいきました:

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

3
Vinnie James

質問はbashに関するものなので、 bash regexps を使用できるため、外部ユーティリティは必要ありません。

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

それらが異なる場所にある場合は、次のコマンドを実行します。

for i in ` find /root/test/ -name "*.shp" ` ;
do
  mv $i ` echo $i | sed 's/.shp$/_poly.shp/g' ` ;
done
1
Shankey Ravi