Пытаюсь починить папку с музыкой, то что itunes напортачил.
Итак, мне нужен скрипт для перемещения файлов из:
Музыка\Исполнитель\Название альбома\Исполнитель - название.mp3
Чтобы переместить файлы в
Newmusic\Название альбома\Исполнитель - title.mp3.
Я пробовал строку ниже, но не работал.
find music -type f -exec bash -c 'ext="${0##*.}"; base="$(basename "$0" ."${ext}")"; dirs="$(dirname "$0" | cut -d '/' -f 2,3)"; new="newmusic/${dirs}/${base}.${ext}"; cp "$0" "${new}"' {} \;
Должен ли "cut -d '/' -f 2,3" быть в new="newmusic/${{dirs} cut -d '/' -f 2,3}/ Кто-нибудь может помочь? Заранее спасибо..
4 ответа
Я что-то здесь упускаю или mv
не могу добиться того, чего вы хотите? Исходя из вашего вопроса, это должно работать:
mv music/*/* newmusic/
for artist in music/*; do
if [[ -d "$artist" ]]; then
for album in $artist/*; do
mv "$album/*" "newmusic/${album##*/}/"
done
fi
done
Трюки, просто избегайте '-exec bash -c', вы получите нечитаемый защищенный код с чрезмерными кавычками.
Вместо этого играйте с:
find -name .mp3 | while read file
do
# Play with "$file"
# Don't play with $file without doubles quotes, keep spaces in mind
# Don't play with '$file', it'a common error ^^
done
1.cd
в ваш рабочий каталог
2.find music/Artist -type d -maxdepth 0 -exec mv {} newmusic/ \;
должно помочь.
Если вы не хотите использовать mv
, вы можете заменить mv на cp -r
.
Похожие вопросы
Новые вопросы
linux
ВНИМАНИЕ: Все вопросы по Linux должны быть связаны с программированием; те, которые не будут закрыты. Используйте этот тег, только если ваш вопрос касается программирования с использованием API-интерфейсов Linux или поведения, специфичного для Linux, а не только потому, что вы запускаете свой код в Linux. Если вам нужна поддержка Linux, вы можете попробовать https://unix.stackexchange.com или сайт Stack Exchange конкретного дистрибутива Linux, например https://askubuntu.com или https://elementaryos.stackexchange.com/.