単一ファイルの変更

単一ファイルの変更にまつわる興味深い視点を詳しく紐解きます。

最小構成のコンテナイメージ(Alpineや軽量Linux環境)などでは、renameコマンドがプリインストールされていない環境も珍しくありません。そうした現場で威力を発揮するのが、Bash標準の機能のみで完結させるLinux bash ファイル名一括置換です。

Bashのパラメータ展開を用いたループ処理

Bashのパラメータ展開(${var//pattern/replace} や ${var%.ext})を用いることで、外部パッケージに依存せず高速に変更を行えます。

# .txt ファイルの拡張子を .md に一括置換 for file in *.txt; do [ -f "$file" ] || continue mv -- "$file" "${file%.txt}.md" done

上記コードの -- は、仮にファイル名の先頭がハイフン(-)で始まっていた場合に、コマンドがオプションと誤認する事故を防ぐための防御的記述です。

findコマンドとxargsによる階層構造の再帰的変更

特定のディレクトリ配下にネストされたサブディレクトリも含めてファイルを改名する場合、findコマンドとの連携が必須となります。

# 配下の全 .htm ファイルを .html に再帰的に変更(スペース・特殊文字対応) find . -type f -name ".htm" -print0 | while IFS= read -r -d '' file; do mv "$file" "${file%.htm}.html" done

-print0 と read -d '' の組み合わせは、ファイル名に改行や空白が含まれている場合でも誤作動を起こさない堅牢な記法として、エンタープライズのスクリプト開発で標準化されています。

山田 真由

山田 真由

自動車・モビリティライター

暮らしを豊かにする便利アイテムや時短アイデアを中心に、実用的な情報をお届けします。

Share this article
Twitter Facebook Pinterest