Я в основном хочу пойти из этого:
.
├── 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, но я не могу понять, как это сделать.
easytag
может позволить вам сделать это, но только для аудиофайлов - я не думаю, что это переместит обложки и т. Д.Ответы:
Zsh
Непроверенные:
Во второй строке удаляются все пустые каталоги, даже те, у которых ранее не было файла. Можно обойти это с помощью специальной
mv
оболочки, которая записывает, из каких каталогов она перемещает вещи.Обратите внимание, что это пересекает символические ссылки на каталоги в текущем каталоге.
Утилита переименования Linux
Непроверенные.
Обратите внимание, что это пересекает символические ссылки на каталоги в текущем каталоге и в его подкаталогах. Во второй строке удаляются все пустые каталоги, даже те, у которых ранее не было файла.
Скрипт переименования Perl
Непроверенные.
Обратите внимание, что это пересекает символические ссылки на каталоги в текущем каталоге и в его подкаталогах. Во второй строке удаляются все пустые каталоги, даже те, у которых ранее не было файла.
Вот более сложный подход, который удаляет только те каталоги, из которых он что-то переименовал. Опять не проверено.
источник
Может быть как то так?
Это проходит через все каталоги верхнего уровня в текущем каталоге (имена групп). Для каждого такого каталога он проходит через свои подкаталоги (названия альбомов). Для каждой пары названия группы и названия альбома создается новый каталог, и файлы из этого подкаталога перемещаются в него. Подкаталоги альбома удаляются после их обработки, как и исходные каталоги верхнего уровня группы.
Эти
rmdir
вызовы будут терпеть неудачу , если любой каталог содержит скрытые имена файлов или если какие - либо из новых каталогов не удалось создать.Это абсолютно непроверенный код. Запустите его на резервной копии ваших файлов.
источник
Стратегически, вместо того, чтобы перемещать файлы, вы решили оставить текущую структуру на месте и создать ссылки для новой структуры, которую вы хотите?
Тактически шаблон, который будет выполнять эту работу, выглядит следующим образом:
find
находит все каталоги ровно на два уровня в глубине от текущего рабочего каталога, который должен быть каталогом, содержащим группы: таким образом, два уровня глубоко - это названия альбомов под названиями групп. 1xargs
использует каждый путь, содержащий альбом, и вызывает встроенный скрипт bash.bash -c '...'
принимает путь к альбому в качестве первого аргумента, разбивая его на две части: band ($b
) и album ($a
). Наконец, скрипт собирает имена в желаемый формат и связывает новое имя каталога с исходным каталогом.Обратите внимание, что в этом примере ссылки будут создаваться в том же каталоге, из которого вы начинаете, что также происходит там, где находятся имена групп.
Вы можете - и должны - настроить
ln
вышеприведенную стратегию в соответствии со своими намерениями.mv
с правильными путями, если вы физически хотите переставить, илиln
если вы хотите создать удобный «вид» на медиа. Важными частями внутри скрипта bash являются:$b
название группы. Всегда цитируйте это"$b"
.$a
название альбома. Всегда цитируйте это"$a"
.$1
физический путь к каталогу альбома. Всегда цитируйте это"$1"
.1 Я считаю
m{ax,in}depth
, что поддерживаются GNU и некоторыми BSDfind
, но не POSIX: в этом случае полагайтесь на*/*
подобную гимнастику оболочки.источник