同じディレクトリにpngファイルと拡張子以外が同じjpgを検出・削除する

どういう状況やねんという感じですが、自分はこれに遭遇するのです。そしてChatGPTにきいたら即座にいい感じのコードを出してくれたのでメモ。何度も同じこと聞くの阿呆くさいからね。

目次

検出・削除のbashスクリプト

何も指定しないと検出のみ、-rを引数に入れると削除まで実行する。

#!/bin/bash

# 引数によって、削除を行うかどうかを設定する
delete=false
if [ "$1" == "-r" ]; then
  delete=true
fi

# 現在のディレクトリ内のpngファイルをループ
for png_file in *.png; do
  # 拡張子を取り除いたファイル名を取得
  base_name="${png_file%.png}"

  # 対応するjpgファイルが存在するか確認
  if [ -e "${base_name}.jpg" ]; then
    # pngファイルをリストアップ
    echo "$png_file"
    
    # 削除フラグが有効の場合、pngファイルを削除する
    if [ "$delete" = true ]; then
      rm "$png_file"
      echo "Deleted $png_file"
    fi
  fi
done

なるほどそうだねという感じ。

ワンライナ bash

検出

for png_file in *.png; do base_name="${png_file%.png}"; [ -e "${base_name}.jpg" ] ; echo "$png_file"; done

削除まで

for png_file in *.png; do base_name="${png_file%.png}"; [ -e "${base_name}.jpg" ] && rm "$png_file"; done

ワンライナ fish

検出

for png_file in *.png; set base_name (string replace -r '\.png$' '' $png_file); if test -e "$base_name.jpg"; echo $png_file; end; end

削除まで

for png_file in *.png; set base_name (string replace -r '\.png$' '' $png_file); if test -e "$base_name.jpg"; rm $png_file; end; end

素晴らしい😭

おまけ: ディレクトリ内すべてのpngをjpgにする

以下の挙動のスクリプト。

  • 拡張子以外が同じ名前のjpgファイルがあるかを確認する
  • 存在する時はpngファイルを削除する
  • 存在しない時はjpgに変換し、元のpngファイルは削除する
#!/bin/bash

# 現在のディレクトリ内のpngファイルをループ
for png_file in *.png; do
  # 拡張子を取り除いたファイル名を取得
  base_name="${png_file%.png}"

  # 対応するjpgファイルが存在するか確認
  if [ -e "${base_name}.jpg" ]; then
    # jpgファイルが存在する場合、pngファイルを削除する
    rm "$png_file"
    echo "Deleted $png_file"
  else
    # jpgファイルが存在しない場合、pngファイルをjpgに変換して削除する
    convert "$png_file" "${base_name}.jpg"
    rm "$png_file"
    echo "Converted and deleted $png_file"
  fi
done

やりたいことはこれでよかったと後で気づいた。

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次