我有一堆 mp3,我将它们整理成一个派对播放列表。我希望能够轻松地重命名这些文件,以便它们从播放列表中的位置开始:
001.Track.mp3
002.Track.mp3
.
.
.
然后就可以按字母顺序播放了。如果不手动操作,可以实现吗?
答案1
您可以尝试这样的事情:我不确定是否需要更多的东西但这应该可行。
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;
答案2
假设你有一个文件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
:没有 clobber,以便不会覆盖其他现有文件(更安全)
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
当您满意时即可删除。
答案3
我使用 Dolphin(Nautilus 的替代品),我需要做的就是选择我想重命名的文件,右键单击选择,然后...
希望这可以帮助