Paepoi » ShellScript Tips » ShellScript Tips | ファイル名
ShellScript Tips | ファイル名
# 最終更新日 2019.12.01
ファイル名色々
#!/bin/sh
# 半角空白や日本語があっても問題無いようです
# basename, dirname というコマンドもある
pic="/home/oyaji/pictures/name.jpeg"
echo ${pic%/*}
#=> /home/oyaji/pictures
echo ${pic##*/}
#=> name.jpeg
echo ${pic%.*}
#=> /home/oyaji/pictures/name
echo ${pic##*.}
#=> jpeg
拡張子の一括変換
#!/bin/sh
# デジカメからコピーした *.JPEG を *.jpg に変換
for PIC in *.JPEG; do
    mv $PIC ${PIC%JPEG}jpg
done
大文字小文字を区別しないで画像拡張子を選択
bash の場合#!/bin/bash
# shopt で大文字小文字を区別しないようにする
shopt -s nocasematch
PICS="a.Jpg b.jpeg c.png D.JPEG e.mjpeg f.gif jpg.txt"
for fn in $PICS; do
    [[ $fn =~ \.(jpe?g|png|gif)$ ]] && echo $fn
done
zsh の場合#!/bin/zsh
# 大文字小文字を区別しない方法が解らなかったので小文字化
# バックスラッシュ2つに注意
PICS=(a.Jpg b.jpeg c.png D.JPEG e.mjpeg f.gif jpg.txt)
for fn in $PICS; do
    [[ $fn:l =~ \\.(jpe?g|png|gif)$ ]] && echo $fn
done
連番ファイルのダウンロード
#!/bin/sh
# 001.jpg - 200.jpg だった場合
for (( i=1; i<201; i++ )); do
    n=`printf %03d.jpg $i`
    wget http://なんちゃらどっとこむ/${n}.jpg
done
# 1.jpg - 200.jpg だった場合
for (( i=1; i<201; i++ )); do
    wget http://なんちゃらどっとこむ/${i}.jpg
done
# ゼロ詰めでないならブレース展開という手段も
wget http://なんちゃらどっとこむ/{1..200}.jpg
# zsh ならゼロ詰めも可能
wget http://なんちゃらどっとこむ/{001..200}.jpg
1.jpg〜99.jpg を 001.jpg〜099.jpg にリネーム
#!/bin/sh
for (( i=1; i<100; i++ )); do
    n=`printf %03d $i`
    mv $i.jpg $n.jpg
done
Copyright(C) sasakima-nao All rights reserved 2002 --- 2025.