-1

そのため、さまざまなファイル形式でいっぱいの音楽フォルダーがすべて混在しています。それはよく構成されています: 音楽/[アーティスト名]/[アルバム名] で、"Various" というフォルダーにコンピレーション アルバムが含まれています。一部のフォルダには .mp3、.m4a、または .flac ファイルのみが含まれ、一部のフォルダには異なるファイル形式の複数のバージョンのアルバムが含まれています。もちろん、カバー アートのさまざまな .jpeg もあり、アーティスト フォルダーの多くには、アーティストのポートレートの .jpeg が含まれています。また、さまざまな .cue ファイルや .log ファイル、その他のジャンク ファイルも多数あります。

最終的には、.flac ファイル用の個別の音楽フォルダーを作成し、既存のフォルダー構造を保持して、既存のライブラリーからそれらを削除します。アルバムがflacのみだった現在のライブラリにも、空のフォルダーが残ることは望ましくありません。複数の形式のアルバム フォルダーの場合、flacs をカバー アートと一緒に新しいライブラリに移動したいのですが、もちろん既存のカバー アートもそのままにしておきます。

これを処理できるアプリケーションを見つけることができませんでしたが、シェル スクリプトでおそらく処理できると考えました。しかし、私は bash に哀れで、ライブラリを壊したくありません。

ファイルは、Mac、Windows、または Linux でアクセスできるリモート ディスク上にあるため、どのアプローチでも問題ありません。

完全に明確にするために、コーディングしたいロジックは次のとおりです。

  1. .flac ファイルを含む /Music の各サブディレクトリを見つけます

  2. これらの各ディレクトリ全体 (および中間の親ディレクトリ) を /FLAC の新しい場所にコピーしますが、コピーから他のオーディオ ファイル タイプ (.mp3、.m4a など) を除外します。

  3. ディレクトリに .flac 以外のオーディオ ファイル タイプがない場合は、ディレクトリ全体を削除します。他のオーディオ ファイルがある場合は、.flac ファイルを削除してください。

  4. /Music 全体を最後に 1 回スイープして、それ自体またはサブディレクトリにオーディオ ファイルが含まれていないディレクトリを削除します。

4

2 に答える 2

1

別のアプローチを次に示します。

find . -type f -name \*.flac -printf "%h\n" | 
sort -u | 
while read -r dirname; do
    new="../flac/$dirname"
    echo mkdir -p "$new"
    echo mv "$dirname"/*.flac "$new"
    jpgs=("$dirname"/*.jpg)
    [[ ${#jpgs[@]} -gt 0 ]] && echo cp "$dirname"/*.jpg "$new"
done
  • findwith-printfは、各flacファイルのディレクトリ名を出力します(現在のディレクトリに相対的です)
  • sort -u重複を削除するには -- これで、flac ファイルを含むディレクトリのリストができました
  • while ループはディレクトリを反復処理し、別のディレクトリの下にディレクトリ階層を複製し (必要に応じて修正します)、flac ファイルを移動し、jpg ファイルがあればコピーします。

echo満足している場合は、コマンドを削除してください。

于 2013-03-31T23:29:04.837 に答える
0

まず、既存の「Music」フォルダと同等の「MusicNew」などの新しい親フォルダを作成します。次に、コピーするサブフォルダーとファイルの種類の説明を想定すると、次のコード行が機能するはずです。

IFS='\n'
for i in `find Music -mindepth 2 -maxdepth 3 -type f -name "*flac"`;
do
    echo ${i};
    newfold=`echo ${i} | sed -e 's/Music/MusicNew/g'`;
    filename=`basename ${i}`;
    fulldirpath="${newfold:0:${#newfold} - ${#filename}}";
    echo $fulldirpath/${filename};
    mkdir -p ${fulldirpath};
    mv ${i} ${fulldirpath}/;
done
于 2013-03-31T20:04:13.560 に答える