Saya pada dasarnya ingin beralih dari ini:
.
├── 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
untuk ini:
.
├── 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
Tidak ada solusi yang saya temukan termasuk mengganti nama direktori itu sendiri. Senang sekali bisa melakukan ini dengan zmv, tapi saya tidak tahu caranya.
easytag
bolehkan Anda melakukan ini, tetapi hanya untuk file audio - Saya tidak berpikir itu akan memindahkan sampul, dll.Jawaban:
Zsh
Belum dicoba:
Baris kedua menghapus semua direktori kosong, bahkan yang tidak memiliki file sebelumnya. Dimungkinkan untuk menyiasatinya dengan
mv
pembungkus khusus yang mencatat dari direktori mana benda itu dipindahkan.Perhatikan bahwa ini melintasi tautan simbolik ke direktori di direktori saat ini.
Linux mengganti nama utilitas
Belum dicoba.
Perhatikan bahwa ini melintasi tautan simbolik ke direktori di direktori saat ini dan di subdirektori. Baris kedua menghapus semua direktori kosong, bahkan yang tidak memiliki file sebelumnya.
Perl mengganti nama skrip
Belum dicoba.
Perhatikan bahwa ini melintasi tautan simbolik ke direktori di direktori saat ini dan di subdirektori. Baris kedua menghapus semua direktori kosong, bahkan yang tidak memiliki file sebelumnya.
Berikut adalah pendekatan yang lebih kompleks yang hanya menghilangkan direktori yang namanya diubah namanya. Sekali lagi, tidak diuji.
sumber
Mungkin sesuatu seperti ini?
Ini melewati semua direktori tingkat atas di direktori saat ini (nama band). Untuk setiap direktori seperti itu, ia melewati subdirektori (nama album). Untuk setiap pasangan nama band dan nama album, direktori baru dibuat dan file dari subdirektori dipindahkan ke sana. Subdirektori album dihapus ketika mereka telah diproses, seperti juga direktori tingkat atas band asli.
The
rmdir
panggilan akan gagal jika direktori setiap berisi nama file tersembunyi atau jika salah satu direktori baru gagal dibuat.Ini benar-benar kode yang belum diuji. Jalankan pada salinan file Anda yang didukung.
sumber
Secara strategis, daripada memindahkan file, sudahkah Anda mempertimbangkan untuk meninggalkan struktur saat ini di tempat dan membuat tautan untuk struktur baru yang Anda inginkan?
Secara taktik, sebuah pola yang akan melakukan pekerjaan berjalan seperti ini:
find
menempatkan semua direktori persis dua tingkat dalam dari direktori kerja saat ini, yang seharusnya menjadi direktori yang berisi band: dengan demikian dua tingkat adalah nama album di bawah nama band. 1xargs
menggunakan setiap jalur yang berisi album dan memanggil skrip bash sebaris.bash -c '...'
mengambil jalur album sebagai argumen pertama, memecah jalur itu menjadi dua bagian: band ($b
) dan album ($a
). Akhirnya, skrip menyusun kembali nama-nama ke dalam format yang diinginkan dan menautkan nama direktori baru ke direktori asli.Perhatikan bahwa, dalam contoh ini, tautan akan dibuat di direktori yang sama dengan tempat Anda memulai, yang juga merupakan tempat nama band.
Anda dapat - dan harus - mengubah
ln
strategi di atas agar sesuai dengan niat Anda.mv
dengan jalur yang benar jika Anda ingin mengatur ulang secara fisik, atauln
jika Anda ingin membuat "tampilan" yang nyaman di media. Bagian penting di dalam skrip bash adalah:$b
nama band. Selalu mengutipnya:"$b"
.$a
nama album. Selalu mengutipnya:"$a"
.$1
jalur fisik ke direktori album. Selalu mengutipnya:"$1"
.1 Saya percaya
m{ax,in}depth
didukung oleh GNU dan beberapa BSDfind
, tetapi tidak POSIX: dalam hal ini, bergantung pada*/*
atau senam shell serupa.sumber