Paepoi

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 --- 2020.