'find'を使ってカレントディレクトリ下のpngファイルを再帰的に探索してjpgに変換し、元のpngは削除するスクリプトを書いています。
階層がフラットな場合は思ったとおりに機能するのですが、CurrDir/SubDir1/SubDir2/1.pngのような入れ子構造でもカレントディレクトリ直下(CurrDir/1.jpg)に変換後のファイルが生成されます。元のパスに作るには下記コードをどう書き換えればよいでしょうか?
sh
1#!/usr/bin/env zsh 2# findでpngを探し出す > それぞれjpgに変換する > 元のpngは消す 3find . -type f ( -name "*.png" -o -name "*.PNG" ) -exec convert {} -set filename:basename "%[basename]" "%[filename:basename].jpg" \; -exec rm {} \; 4
# 入れ子構造の場合 (前) CurrDir - Dir - png - Dir - Dir - png - png - png (後 入れ子でも非入れ子でもCurrDir直下に全てのjpgが作られる) CurrDir - Dir - Dir - Dir - jpg - jpg - jpg - jpg (理想 それぞれのpngがあった位置にjpgも生成してほしい) CurrDir - Dir - jpg - Dir - Dir - jpg - jpg - jpg
-set filename:basename "%[basename]" "%[filename:basename].jpg"
の意味がよく分かりませんが、basename とか書いているのでディレクトリ部分が無くなってしまっているのでは?どういう意味なんでしょう?
convertの使い方がよく分からなかったのでStack Overflowで見つけたものをそのまま使ったのですが、コメントを受けてよりシンプルな mogrify -format jpg {} に直したところ正しく動きました。
find . -type f \( -name "*.png" -o -name "*.PNG" \) -exec mogrify -format jpg {} \; -exec rm {} \;
回答2件
あなたの回答
tips
プレビュー