2016-10-26 5 views
0

私は、バッチ変換を行うとLinux(ミント17)は、コマンドライン上のフォルダにいくつかの画像のサイズを変更したいので、私は使用しています:Linuxのコマンドラインで変数から拡張子を付けずにファイル名を抽出する(そしてカウンタを追加する)方法はありますか?

for $file in *.jpg; do convert -resize 25% $file $file.png; done 

をそれはのようなファイルの束を私に残します。

image1.jpg.png 
photo4.jpg.png 
picture7.jpg.png 
... 

それだけで、同様の代わりに、先行する.jpg.pngを持つように私は簡単にファイル名からファイルの拡張子をクリッピングすることができます方法はありますか?

image1.png 
image2.png 
image3.png 
image4.png 
... 

I:ので、私のようなもので終わること

for $file in *.jpg using $count; do convert -resize 25% $file image$count.png; done 

:私はこのような何かを使用してコマンドを実行できるように

はまたは、いっそ、私はカウンターを含めることができますむしろバッチスクリプトの作成を心配する必要はないので、それが難しく、ちょうど.jpgをインラインで削除する簡単な方法があれば、私はそれに満足しています。

ありがとう!

EDIT:
私はこの質問には、それはまた、カウンター要素を持っているので、それ自身の右に質問することしても大丈夫だと思います。

+0

可能な重複[シェルでファイル名の拡張子を削除するにはどうすればよいですスクリプト?](http://stackoverflow.com/questions/12152626/how-can-remove-the-extension-of-a-filename-in-a-shell-script) – tripleee

+0

も参照してくださいhttp://stackoverflow.com/questions/28725333/looping-over-pairs-of-values-in-bash – tripleee

答えて

1
$ ls *.jpg 
DSCa_.jpg* DSCb_.jpg* DSCc_.jpg* 
$ count=0; for file in *.jpg; do ((count++)); convert -resize 25% "$file" "${file%\.*}$count.png"; done 
$ ls *.png 
DSCa_1.png DSCb_2.png DSCc_3.png 

${file%\.*}$fileの右から最短一致する文字列を削除するには、パラメータ置換を使用しています。あなたは、コマンドベース名(ファイル名からストリップsuffixe)を使用することができ、here

1

このようなものはありますか?

i=image1.jpg 
echo ${i/.jpg/.png} 
image1.png 
2
for file in *.jpg; do convert -resize 25% $file ${file%.*}.png; done 
1

また、パラメータ置換についての詳細を読むことができます:

for file in *.jpg; do base=$(basename ${file} .jpg); convert -resize 25% $file ${base}.png; done 
関連する問題