Copy & Paste Engineer

【Linux】シェルでファイルを一括リネーム:ワンライナー集

【Linux】シェルでファイルを一括リネーム:ワンライナー集

GUIで複数ファイルを1つずつリネームするのは面倒……。 そんなときこそLinuxの mvコマンドとシェルのワンライナーが役立ちます。

この記事では、mvだけを使って以下のようなファイルリネームを一括で実行する方法を紹介します:


前提環境と注意点


拡張子を一括変更

例:.txt.md

for f in *.txt; do mv "$f" "${f%.txt}.md"; done

ファイル名の先頭に接頭辞を追加

例:sample.txtnew_sample.txt

for f in *; do mv "$f" "new_$f"; done

ファイル名の末尾に接尾辞を追加

例:report.csvreport_backup.csv

for f in *.csv; do mv "$f" "${f%.csv}_backup.csv"; done

文字列を一括置換

例:draft_final_

for f in draft_*; do mv "$f" "${f/draft_/final_}"; done

${f/old/new} は1箇所のみ、${f//old/new} で全置換。


空白をアンダースコアに変換

for f in *\ *; do mv "$f" "${f// /_}"; done

連番でリネーム

例:image_001.jpg, image_002.jpg

n=1; for f in *.jpg; do mv "$f" "$(printf 'image_%03d.jpg' "$n")"; ((n++)); done

ファイル名をすべて小文字に変換

for f in *; do mv "$f" "$(echo "$f" | tr 'A-Z' 'a-z')"; done

ファイル名をすべて大文字に変換

for f in *; do mv "$f" "$(echo "$f" | tr 'a-z' 'A-Z')"; done

拡張子だけを大文字に

例:.jpg.JPG

for f in *.jpg; do mv "$f" "${f%.jpg}.JPG"; done

拡張子のないファイルに追加

例:LICENSELICENSE.txt

for f in *; do [[ "$f" != *.* ]] && mv "$f" "$f.txt"; done

dry-runで動作確認したい場合

mvecho mv に置き換えると、実際に移動せずコマンドだけを出力できます。

for f in *.txt; do echo mv "$f" "${f%.txt}.md"; done

まとめ