各フォルダに1つの画像のみを割り当てるように、My Music Collectionのアルバムカバーを整理しようとしています。
私のディレクトリ構造は現在次のとおりです。
/path/to/music/Album Name/
/path/to/music/Album Name/1 - Track one.flac
...
/path/to/music/Album Name/cover.jpg (either this)
/path/to/music/Album Name/folder.jpg (or this)
/path/to/music/Album Name/Album Name.jpg (or this is the largest file)
/path/to/music/Album Name/AlbumArtSmall.jpg
(また、Windows Media Playerで作成された追加の低解像度画像)
すべてのフォルダをスキャンし、最大のjpgを除くすべてのフォルダを削除し、名前をcover.jpg
。
ラベルが示すように、cygwinがインストールされていますが、問題が簡単になったら、bashとzshにアクセスできるUbuntuで起動することもできます。
ベストアンサー1
zsh(CygwinまたはLinuxで利用可能)では、次のものを使用できます。グローバル予選最大のファイルを選択してください。これは、画像サイズではなくバイトサイズに基づいて最大のファイルです。これは高解像度画像を優先するので、おそらく正しいでしょう。
for d in /path/to/music/**/*(/); do
rm -f $d/*.jpg(oL[1,-2]N)
mv $d/*.jpg $d/cover.jpg
done
ループはすべてのサブディレクトリを再帰的に巡回します/path/to/music
。サフィックスは(/)
ディレクトリとの一致を制限します。rm -f
3つのglob修飾子引数を使用します。oL
サイズで並べ替えます。[1,-2]
2番目から最後まで一致するものだけを保持します(PATTERN([-1])
最後の一致、2PATTERN([-2])
番目から最後の一致、PATTERN([1,-2])
最初から2番目から最後まで(最初と2番目から最後を含む)。;N
パターンが拡張されていない、またはパターンファイルと一致しない場合は、エラーを報告するのではなく空のリストを生成します。
残りのファイルが呼び出された場合、またはディレクトリにファイルがないと、cover.jpg
無害なエラーが発生する可能性があります。.jpg
これを防ぐには、mv
呼び出しを次に変更します。
[[ -e $d/cover.jpg ]] || mv $d/*.jpg $d/cover.jpg
これは最初に名前を変更してから削除する代わりに使用できます。一致するが一致しないファイルを選択するオプションがPATTERN1~PATTERN2
必要な構文を使用します。配列に要素が1つ以上含まれているかどうかをテストします。extended_glob
PATTERN1
PATTERN2
((#jpgs))
jpgs
setopt extended_glob
for d in /path/to/music/**/*(/); do
jpgs=($d/*.jpg(oL))
((#jpgs)) || continue
[[ $jpgs[1] == */cover.jpg ]] || mv $jpgs[1] $d/cover.jpg
rm -f $jpgs[2,-1]
done