私は基本的にここで始めたいと思います:
.
├── Alan Walker
│ ├── Different World
│ │ ├── 01 Intro.mp3
│ │ ├── 02 Lost Control.mp3
│ │ └── cover.jpg
│ └── Same World
│ ├── 01 Intro.mp3
│ └── 02 Found Control.mp3
├── Aurora
│ └── Infections Of A Different Kind Step 1
│ ├── 01 Queendom.lrc
│ ├── 02 Forgotten Love.lrc
│ └── 03 Gentle Earthquakes.mp3
└── Guns N' Roses
└── Use Your Illusion I
├── 01 Right Next Door To Hell.lrc
├── 01 Right Next Door To Hell.mp3
├── 02 Dust N' Bones.lrc
└── 02 Dust N' Bones.mp3
これに関して:
.
├── Alan Walker - Different World
│ ├── 01 Intro.mp3
│ ├── 02 Lost Control.mp3
│ └── cover.jpg
├── Alan Walker - Same World
│ ├── 01 Intro.mp3
│ └── 02 Found Control.mp3
├── Aurora - Infections Of A Different Kind Step 1
│ ├── 01 Queendom.lrc
│ ├── 02 Forgotten Love.lrc
│ └── 03 Gentle Earthquakes.mp3
└── Guns N' Roses - Use Your Illusion I
├── 01 Right Next Door To Hell.lrc
├── 01 Right Next Door To Hell.mp3
├── 02 Dust N' Bones.lrc
└── 02 Dust N' Bones.mp3
私が見つけた既存のソリューションには、ディレクトリ自体の名前を変更することは含まれていません。 zmvでこれを行うことができればいいでしょうが、どうすればいいかわかりません。
ベストアンサー1
たぶんこんなことはありませんか?
#!/bin/sh
for topdir in */; do
topdir_name=$( basename "$topdir" )
for subdir in "$topdir"/*/; do
subdir_name=$( basename "$subdir" )
newdir="$topdir_name - $subdir_name"
if mkdir "$newdir"; then
mv "$subdir"/* "$newdir"
rmdir "$subdir"
fi
done
rmdir "$topdir"
done
これは、現在のディレクトリのすべての最上位ディレクトリ(バンド名)を繰り返します。これらの各ディレクトリに対して、対応するサブディレクトリ(アルバム名)を繰り返します。バンド名とアルバム名のペアごとに新しいディレクトリが作成され、サブディレクトリのファイルがそのディレクトリに移動されます。アルバムサブディレクトリは、元のバンドのトップレベルディレクトリと同様に処理後に削除されます。
rmdir
ディレクトリに隠しファイル名が含まれている場合、または新しいディレクトリが作成されない場合、呼び出しは失敗します。
完全にテストされていないコードです。ファイルのバックアップコピーから実行します。