どういう状況やねんという感じですが、自分はこれに遭遇するのです。そして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
やりたいことはこれでよかったと後で気づいた。
コメント