У меня есть несколько mp3, которые я организовал в плейлист для вечеринки. Я хотел бы легко переименовать эти файлы, чтобы они начинались с позиции в списке воспроизведения:
001.Track.mp3
002.Track.mp3
.
.
.
Затем они могут просто воспроизводиться в алфавитном порядке. Это возможно, не делая это вручную?
Вы можете попробовать что-то вроде этого: я не уверен, что нужно что-то большее, но это должно сработать.
cat playlist.m3u | I=1 while read file; do
mv $file $I.$file.mp3;
I=$I + 1;
done;
Редактировать: Вам может понадобиться I = `expr $ I + 1 '; вместо I = $ I + 1;
Я использую Dolphin, замену Nautilus, и все, что мне нужно сделать, это выбрать файлы, которые я хотел бы переименовать, щелкнуть правой кнопкой мыши на выделении и ...
Надеюсь, это поможет
Принятие Вас имеет файл my_playlist.txt
это содержит дорожки в порядке, Вы хотите играть их, например,
dancing all night long.mp3
charles trenet - je t'aime mon amour.mp3
mon petit poney - bo.mp3
charlie parker - donna lee.flac
и предполагая, что этот файл находится в том же каталоге, у Вас есть свои музыкальные файлы. Если дело обстоит не так, укажите свой вопрос соответственно.
Затем (наблюдают хорошую практику удара, которая будет работать с именами файлов, которые имеют пробелы в них):
#!/bin/bash
pl=my_playlist.txt
# need number of files, to know the number of leading zeros
n=$(wc -l < "$pl")
lz=0
while ((n)); do ((++lz)); ((n/=10)); done
i=1
while read f; do
[[ -z $f ]] && continue
if [[ ! -f $f ]]; then
printf "*** Error, file \`%s' not found.\n" "$f"
continue
fi
printf -v target "%0*d.%s" "$lz" "$i" "$f"
echo mv -vn -- "$f" "$target"
((++i))
done < "$pl"
При выполнении его, как, переименовывание будет не происходить, из-за echo
перед mv
. Это - просто немного теста. Когда Вы довольны им, удаляете echo
и переименовывание произойдет. mv
команда имеет два флага -v
и -n
:
-v
: будьте подробными (мне нравится знать то, что происходит),-n
: нет ударьте, чтобы не перезаписать в других отношениях существующие (более безопасные) файлыОтметьте о printf
команда. Это выглядит немного ужасным, но нет ничего, чтобы бояться о. Часть %0*d
возьмет эти два аргумента $lz
и $i
и будет заменен числом $i
с $lz
начальные нули. Затем %s
будет заменен третьим аргументом, который является именем файла. Все это будет помещено в переменную target
, благодаря -v
опция. Так, чтобы target
будет что-то как:
0001.title of the file.mp3
Адаптируйтесь и расширитесь на свои потребности!
Теперь давайте предположим, что Вы играли с этим, и Вы хотите отменить переименование... существует две возможности:
У Вас только есть файлы формы XXXX.YYYY
где XXXX
цифры, и требуется удалить цифры и период с имени:
shopt -s extglob
for i in +([[:digit:]]).*; do
target=${i#*.}
echo mv -nv -- "$i" "$target"
done
и удалите echo
когда Вы счастливы.
Вы только хотите сделать это для файлов в Вашем плей-листе my_playlist.txt
:
shopt -s extglob
while read f; do
a=( +([[:digit:]])."$f" )
if ((${#a[@]}==0)); then
printf "*** Error: can't find a match for file \`%s'\n" "$f"
elif ((${#a[@]}>1)); then
printf "*** Error: found several matches for file \`%s':\n" "$f"
printf " %s\n" "${a[@]}"
else
target=${a[0]#*.}
echo mv -nv -- "$f" "$target"
fi
done < my_playlist.txt
и как обычно, удалить echo
когда Вы счастливы.